【问题标题】:Upload a file to S3 using the AWS SDK使用 AWS 开发工具包将文件上传到 S3
【发布时间】:2013-02-05 05:21:54
【问题描述】:

我正在尝试使用 AWS 开发工具包将文件上传到 Amazon 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)

【问题讨论】:

  • 您是否尝试过他们随 AWS android sdk 提供的示例?
  • 是的,这就是示例代码。不过,它在我的手机上不起作用。我认为您必须将 android sdk 用于 android 设备。这有点烦人,因为我需要一个跨平台的解决方案。

标签: java android amazon-web-services libgdx


【解决方案1】:

我想通了——因为我的应用程序一直在编辑那个文件并且这个 sn-p 发生在一个单独的线程中,所以文件实际上在它被上传之前就已经改变了......如果我制作一个临时副本文件并将其上传到存储桶,它可以工作。

【讨论】:

  • 临时副本??你能解释一下吗?
  • 制作文件的深层副本(在内存中或通过在文件系统上制作副本来获取文件数据的快照),这样您就不会在上传过程中对其进行写入。您也可以使用一些锁定机制来保持上传和文件写入分开。
猜你喜欢
  • 2020-10-29
  • 2023-03-15
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多