AWS S3 Java SDK - 下载文件帮助

36 java amazon download amazon-s3 java-web-start

以下代码仅适用于从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();
Run Code Online (Sandbox Code Playgroud)

Eya*_*yal 59

虽然用Mauricio的答案编写的代码也可以工作 - 而且他对流的观点当然是正确的 - 亚马逊提供了一种更快捷的方式来保存SDK中的文件.我不知道它是否在2011年没有,但它现在是.

AmazonS3Client s3Client = new AmazonS3Client(myCredentials);

File localFile = new File("localFilename");

ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
Run Code Online (Sandbox Code Playgroud)

  • 需要一个小编辑:对象内容保存到文件中,但返回的对象是`ObjectMetadata`,而不是`S3Object`.请参阅http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject%28com.amazonaws.services.s3.model.GetObjectRequest,%20java.io.File% 29 (4认同)

Mau*_*res 35

而不是ReaderWriter你应该使用的类InputStreamOutputStream类:

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();
Run Code Online (Sandbox Code Playgroud)


Sha*_*der 13

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(); 
Run Code Online (Sandbox Code Playgroud)