当前位置: 首页 > 知识库问答 >
问题:

如何在上传到amazon s3时将md5设置为文件

商品
2023-03-14

我正在使用amazon s3 android低级sdk上传文件,并希望设置md5校验和来上传数据。

1)以下是创建凭据的代码:

 BasicAWSCredentials lAwsCredentials = new BasicAWSCredentials(
            Constants.ACCESS_KEY_ID, Constants.SECRET_KEY);

    AmazonS3Client lS3Client = new AmazonS3Client(lAwsCredentials);

2)以下是计算md5的代码

public class MD5CheckSum {

public static byte[] createChecksum(String pFilepath) throws Exception {
    InputStream lFis = new FileInputStream(pFilepath);

    byte[] lBuffer = new byte[1024];
    MessageDigest lMessageDigest = MessageDigest.getInstance("MD5");

    int lNumRead;

    do {
        lNumRead = lFis.read(lBuffer);
        if (lNumRead > 0) {
            lMessageDigest.update(lBuffer, 0, lNumRead);
        }
    } while (lNumRead != -1);

    lFis.close();
    return lMessageDigest.digest();
}

public static String getMD5Checksum(String pFilepath) throws Exception {
    byte[] lBytes = createChecksum(pFilepath);
    return Base64.encodeToString(lBytes, Base64.DEFAULT);
}

}

3)以下是使用元数据设置md5的代码:

try {
        lMd5 = MD5CheckSum.getMD5Checksum(pFile.getAbsolutePath());

        Log.v(TAG, "CheckSum:====" + lMd5);
    } catch (Exception lException) {
        lException.printStackTrace();
    }

    ObjectMetadata lObjectMetadata = new ObjectMetadata();
    if (lMd5 != null) {
        lObjectMetadata.setContentMD5(lMd5);

    }`
InitiateMultipartUploadResult mInitResponse = mS3Client.initiateMultipartUpload(new InitiateMultipartUploadRequest(mBucketName, mKeyName,
            lObjectMetadata);

但是当我设置md5时,amazon抛出了一个异常:

原因:com.amazonaws.services.s3.model.AmazonS3Exception:匿名用户无法发起多部分上传。请进行身份验证。(服务:Amazon S3;状态代码:403;错误代码:访问被拒绝;请求ID:BA0C68FC884703FD),S3扩展请求ID:re2sdbzf8MMqGAyrNQOoqYJ8EdXERoWE7cjG UpfAtFuP5IeAbXmk6Riw PX8Uw3Jcspn1rSQvI=

这是设置md5的正确方法吗?

注意:当未设置md5时(即未设置对象元数据),则上传无一例外。

共有1个答案

南门朗
2023-03-14

我也面临过这种问题..

我通过添加Base64.DEFAULT而不是其他如WRAPNO_WRAP来修复。

 类似资料:
  • 我们目前有一个小的web应用程序,其中一部分是文件上传。目前,我们在客户端上使用Plupload,并启用了分块功能,以允许上传大型文件。这些文件被保存在应用服务器上,当它们出现时,这些块被追加。 现在,我们正在使用AmazonS3来存储文件,并有可能使用多个应用服务器。我发现很难处理这些大块。我试着以他们为榜样,但我遇到了问题。我尝试的主要内容是这样的: 我的问题是我需要知道上传的块。当我从上传的

  • 我正在努力将现有的应用程序与File Picker集成。在我们现有的设置中,我们依赖md5校验和来确保数据完整性。据我所知,文件选择器在响应REST API的上传时没有提供任何md5(也没有使用JavaScript客户端)。 我们使用 S3 进行存储,据我所知,您可以在存储文件时向 S3 提供 md5 校验和,以便在数据似乎错误时 Amazon 可以验证并拒绝存储请求。 为了确保数据不会在网络中损

  • 我看的是: > 与谷歌云平台集成 当前代码:

  • 问题内容: 我在Windows 7计算机上安装了WampServer 2。我正在使用Apache 2.2.11和PHP 5.2.11。当我尝试从表单上传任何文件时,似乎都在上传,但是在PHP中,数组为空。文件夹中没有文件。我已配置为允许文件上传等。该文件夹具有当前用户的读/写特权。我很沮丧 HTML: PHP: 问题答案: 谢谢大家的全面答复。这些都非常有帮助。答案很奇怪。事实证明,PHP 5.2

  • 问题内容: 我用Java编写了一个简短的测试代码,以上传内存中生成的PDF文件。在此测试代码中,我仅使用一个虚拟字节数组,但在实际使用中,我将在该字节数组中放置生成的PDF(最多2-3页)。一切正常:上传文件并设置权限。 但是,由于返回了PutObjectResult,所以我想知道应该如何检查它。还是足以找到AmazonClientException和AmazonServiceException异