2013-02-05 114 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

相关问题