S3互換を歌っているCloudnのクラウドストレージサービス『ObjectStorage』からAWS SDK for Javaを使ってダウンロードするサンプルをコーディングしました。ローカルファイルとストレージ上のファイルの比較はファイルサイズで行っています。
以下部分を変更すればS3でも動作は問題ないと思われます。SDKを提供していないストレージで同じことを行うとすると相当のコード量になります。SDKが提供されているストレージの優位性が改めて、認識されました。
S3は、HTTPSを使っていますが、CloudnではHTTPを使用しています。
ClientConfiguration clientconf = new ClientConfiguration(); clientconf.setProtocol(Protocol.HTTP);
S3以外のストレージへアクセスするには、End Point URLを設定する必要があります。
s3 = new AmazonS3Client(pc, clientconf); s3.setEndpoint("http://str.cloudn-service.com");
// List Objects ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName)); GetObjectRequest getObjectReq = null; ObjectMetadata objMeta = null; for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) { if (objectSummary.getSize()!=0){ System.out.println(" - " + objectSummary.getKey() + "\t" + "(size = " + objectSummary.getSize() + ")" + "\t" + "(" + objectSummary.getLastModified().toString() + ")"); File localFile = new File(st_folder + objectSummary.getKey()); if(localFile.exists()){ if (localFile.length()!=objectSummary.getSize()){ getObjectReq = new GetObjectRequest(bucketName, objectSummary.getKey()); objMeta = s3.getObject(getObjectReq, localFile); } } else { getObjectReq = new GetObjectRequest(bucketName, objectSummary.getKey()); objMeta = s3.getObject(getObjectReq, localFile); } getObjectReq = null; objMeta = null; } }
Object StorageのLastModified情報をローカルPCのファイルに引き継ぐことができれば完璧ですが、これについてはわかり次第記載します。