2011-08-01 25 views
28

以下のコードは、S3のバケットからテキストファイルをダウンロードする場合にのみ機能します。これはイメージでは機能しません。 AWS SDKを使用してダウンロード/タイプを管理する簡単な方法はありますか?ドキュメントに含まれている例では、それが明らかになっていません。ありがとう!AWS S3 Java 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(); 
+0

クラス。 – Ravi

+0

あなたはファイルをamazonにアップロードする方法を知っていますか?あなたのコードを使ってファイルをダウンロードしています。それは完全に動作しています。 – Ravi

答えて

31

ReaderとあなたはInputStreamを使用する必要があるライターのクラスとのOutputStreamクラスのIntead:

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(); 
+1

私はこれを一度に試みましたが、明らかに失敗しました:)ありがとう、これは驚くほど効果的です! –

43

マウリシオの答えで書かれたコードが動作しますけれども - アマゾン - およびストリームについての彼のポイントはもちろん正しいですSDKにファイルを保存するための迅速な方法を提供します。 2011年に利用できなかったかどうかは分かりませんが、今はそれです。

AmazonS3Client s3Client = new AmazonS3Client(myCredentials); 

File localFile = new File("localFilename"); 

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

マイナー編集が必要です:オブジェクトの内容はファイルに保存されますが、返されるオブジェクトは 'S3Object'ではなく' ObjectMetadata'です。 http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject%28com.amazonaws.services.s3.model.GetObjectRequest,%20java.io.File%を参照してください。 29 – azdev

+1

@azdev実際には、コードサンプルでは[getObjectの別バージョン](http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject(java。 lang.String、%20java.lang.String))は、S3Objectを返します。 – Eyal

+0

私のコードでS3Client.getObjectメソッドを見ることができませんか?同じものを実現したいのですが、s3Clientオブジェクトに関連付けられたメソッドはありません。何か不足していますか? –

12

Eyalsの回答はあなたの半分のところに届きますが、それほど明確ではないので、私は明確にします。あなたは私がAWS-アンドロイド-SDK-2.1.5-s3.jar瓶を使用したが、すべてが見つからないのですuse.Currentlyにどの瓶提案してくださいすることができます私は事をし、あなたのコードを試してみてはなくjarファイルが見つからない

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(); 
+0

id.getId()に使用したもの)? –

+0

id.getId()は、オブジェクトをバケットに格納するために使用したキーです。私はその固有のことを知っているので、キーのIDを使用します。要約すると、空のファイルを作成し、新しい空のファイルがどこにあるのかをaws APIに伝えるgetRequestを実行し、指定したファイルにオブジェクトを書き込むawsのAPIを処理します。とても便利です。 –

+0

@ShawnVader:なぜあなたがファイルの検証を行っているのか確認してください。私はS3 APIはハッシュチェックを行いますが。ありがとうございました。 – saurabheights

関連する問題