簡體   English   中英

上傳到Amazon S3時如何將md5設置為文件

[英]How to set md5 to a file while uploading to amazon s3

我正在使用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時,亞馬遜拋出了一個異常:

引起原因:com.amazonaws.services.s3.model.AmazonS3Exception:匿名用戶無法啟動分段上傳。 請驗證。 (服務:Amazon S3;狀態代碼:403;錯誤代碼:AccessDenied;請求ID:BA0C68FC884703FD),S3擴展請求ID:re2sdbzf8MMqGAyrNQOoqYJ8EdXERoWE7cjG + UpfAtFuP5IeAbXmk6Riw + PX8Uw3J

這是設置md5的正確方法嗎?

注意:如果未設置md5(即未設置objectmetadata),則上傳將正常進行

我也遇到過這類問題。

我通過添加Base64.DEFAULT而不是諸如WRAPNO_WRAP類的其他Base64.DEFAULT來進行NO_WRAP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM