2013-02-05 52 views
5

AWS SDKを使用してAmazon S3バケットにファイルをアップロードしようとしています。AWS SDKを使用してS3にファイルをアップロードします。

class LogToS3Bucket extends Thread{ 

    public void run() { 
     super.run(); 
     Gdx.app.log("msg", "secondThreadRunning yeahhhhh!"); 
     File fileToPut = new File("../../../MyProject", "settings.txt"); 
     String accessKey = "<accessKey>"; 
     String secretKey = "<secretKey>"; 
     AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); 
     AmazonS3 conn = new AmazonS3Client(credentials); 

     conn.putObject("bucketname", "filename.txt", fileToPut); 
    } 

} 
それはしかし動作しません

が、それは私が私のアプリケーションは常にそのファイルを編集しているので、私はthink--それを考え出した

Exception in thread "Thread-1" Status Code: 400, AWS Service: Amazon S3, AWS Error Code: BadDigest, AWS Error Message: The Content-MD5 you specified did not match what we received. 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:614) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:312) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:165) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2951) 
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1123) 
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:979) 
    at com.myproject.LogToS3Bucket.run(LogToS3Bucket.java:22) 
+0

AWS android sdkで提供しているサンプルを試しましたか? – itsrajesh4uguys

+0

これは例のコードです。私の電話からは機能しません。私はあなたがアンドロイドデバイスのためにアンドロイドSDKを使用しなければならないと思う。私はクロスプラットフォームのソリューションが必要なので、ちょっと面倒です。 – kelorek

答えて

5

.putObject()の呼び出しでエラーがスローされます し、このスニペットは別のスレッドで発生します。ファイルが実際にアップロードされる前に変更されています...ファイルの一時コピーを作成してバケットにアップロードすると動作します。

+0

一時コピー??あなたはもう少し説明していただけますか? –

+0

ファイルのディープコピーを作成します(ファイルデータのスナップショットをメモリ上に作成するか、ファイルシステム上にコピーすることで)、中間アップロードに書き込まないようにします。代わりにアップロードとファイル書き込みを別々に保つためにいくつかのロック機構を使用することもできます。 – kelorek

関連する問題