web-dev-qa-db-ja.com

AWS S3 Java SDK-ファイルヘルプのダウンロード

以下のコードは、S3のバケットからテキストファイルをダウンロードする場合にのみ機能します。これは画像では機能しません。 AWS SDKを使用してダウンロード/タイプを管理する簡単な方法はありますか?ドキュメントに含まれている例では、明確にはなりません。ありがとう!

AWSCredentials myCredentials = new BasicAWSCredentials(
       String.valueOf(Constants.act), String.valueOf(Constants.sk)); 
AmazonS3Client s3Client = new AmazonS3Client(myCredentials);        
S3Object object = s3Client.getObject(new GetObjectRequest("bucket", "file"));

BufferedReader reader = new BufferedReader(new InputStreamReader(
       object.getObjectContent()));
File file = new File("localFilename");      
Writer writer = new OutputStreamWriter(new FileOutputStream(file));

while (true) {          
     String line = reader.readLine();           
     if (line == null)
          break;            

     writer.write(line + "\n");
}

writer.close();
36
user375566

ReaderクラスとWriterクラスの代わりに、InputStreamクラスとOutputStreamクラスを使用する必要があります。

InputStream reader = new BufferedInputStream(
   object.getObjectContent());
File file = new File("localFilename");      
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));

int read = -1;

while ( ( read = reader.read() ) != -1 ) {
    writer.write(read);
}

writer.flush();
writer.close();
reader.close();
34

Mauricioの答えで書かれたコードは機能しますが、ストリームに関する彼の論点はもちろん正しいのですが、AmazonはSDKにファイルを保存するより迅速な方法を提供します。 2011年に入手できなかったかどうかはわかりませんが、現在は入手可能です。

AmazonS3Client s3Client = new AmazonS3Client(myCredentials);

File localFile = new File("localFilename");

ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
58
Eyal

Eyalsの答えは、あなたをそこまで途中まで導きますが、それほど明確ではないので、明確にします。

AmazonS3Client s3Client = new AmazonS3Client(myCredentials);

//This is where the downloaded file will be saved
File localFile = new File("localFilename");

//This returns an ObjectMetadata file but you don't have to use this if you don't want 
s3Client.getObject(new GetObjectRequest(bucketName, id.getId()), localFile);

//Now your file will have your image saved 
boolean success = localFile.exists() && localFile.canRead(); 
13
Shawn Vader

使用する Java.nio.file.Files コピーする S3Objectローカルファイルへ。

public File getFile(String fileName) throws Exception {
    if (StringUtils.isEmpty(fileName)) {
        throw new Exception("file name can not be empty");
    }
    S3Object s3Object = amazonS3.getObject("bucketname", fileName);
    if (s3Object == null) {
        throw new Exception("Object not found");
    }
    File file = new File("you file path");
    Files.copy(s3Object.getObjectContent(), file.toPath());
    inputStream.close();
    return file;
}
1
Nitin Vavdiya

これを取得するさらに簡単な方法があります。以下のスニペットを使用しました。 http://docs.ceph.com/docs/mimic/radosgw/s3/Java/ から参照を得ました

AmazonS3 s3client = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_1).build();

s3client.getObject(
                new GetObjectRequest("nomad-prop-pics", "Documents/1.pdf"),
                new File("D:\\Eka-Contract-Physicals-Dev\\Contracts-Physicals\\utility-service\\downlods\\1.pdf")
    );
1
user10913634