[英]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
而不是諸如WRAP
和NO_WRAP
類的其他Base64.DEFAULT
來進行NO_WRAP
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.