私の目標は、S3 からオブジェクト (画像) をフェッチし、ファイルのメタデータを変更し、メタデータが変更された新しいファイルに置き換えることです。
メタデータを変更するために、コモンズ イメージング ライブラリを使用しています。期待どおりに動作するが、S3 を処理しない以下のサンプルをコーディングしました。
File newFile = new File("newImage2.jpg");
OutputStream os = new BufferedOutputStream(new FileOutputStream(newFile))
InputStream isNew = new BufferedInputStream(new FileInputStream(newFile))
InputStream is = new BufferedInputStream(new FileInputStream(new File("newImage.jpg")))
try {
String xmpXml = "<x:xmpmeta>" +
"\n<Lifeshare>" +
"\n\t<Date>"+"some date"+"</Date>" +
"\n\t<Latitude>"+"somelat"+"</Latitude>" +
"\n\t<Longitude>"+"somelong"+"</Longitude>" +
"\n\t<Altitude>"+"somealt"+"</Altitude>" +
"\n\t<Z>"+"someZ"+"</Z>" +
"\n\t<X>"+"someX"+"</X>" +
"\n\t<Y>"+"Some y"+"</Y>" +
"\n</Lifeshare>" +
"\n</x:xmpmeta>";
JpegXmpRewriter rewriter = new JpegXmpRewriter();
rewriter.updateXmpXml(is,os, xmpXml);
String newXmpXml = Imaging.getXmpXml(isNew, "newImage2.jpg");
println newXmpXml
}
finally {
is.close()
os.close()
}
exiftool
で実行してnewimage2.jpg
、設定されたメタデータ プロパティを表示できるため、上記は機能します。
$ exiftool newImage2.jpg | grep "Lifeshare"
Lifeshare Date : some date
Lifeshare Latitude : somelat
Lifeshare Longitude : somelong
Lifeshare Altitude : somealt
Lifeshare Z : someZ
Lifeshare X : someX
Lifeshare Y : Some y
質問
AWS S3 SDK を使用して S3 上のオブジェクトを使用して同じことを行うにはどうすればよいですか? 上記のupdateXmpXml
メソッドはOutputStream
、2 番目のパラメーターとして必要です。ただし、AWS SDK http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/allclasses-noframe.htmlに出力ストリーム クラスが表示されません。