2013-02-05 113 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); 
    } 

} 

它不工作,雖然,它拋出一個錯誤在調用.putObject()

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

是的,這是示例代碼。它不能從我的手機上工作。我認爲你必須使用android sdk作爲android設備。這有點煩人,因爲我需要一個跨平臺的解決方案。 – kelorek

回答

5

我想通了我think--,因爲我的應用程序正在不斷編輯該文件,並這段代碼發生在一個單獨的線程中,該文件實際上在被上傳之前發生了更改......如果我創建了該文件的臨時副本並將其上傳到存儲區,它就可以工作。

+0

臨時副本?你能解釋一下嗎? –

+0

製作文件的深層副本(在內存中或通過在文件系統上創建副本獲取文件數據的快照),以便在上傳過程中不寫入文件。你也可以使用一些鎖定機制來保持上傳和文件寫入的分離。 – kelorek

相關問題