0
我正在使用亞馬遜s3 android低級別sdk上傳文件並希望設置md5校驗和以上傳數據。如何在上傳到亞馬遜s3時將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:匿名用戶無法啓動多上傳。請認證。 (服務:亞馬遜S3;狀態碼:403;錯誤代碼:存取遭拒;請求ID:BA0C68FC884703FD),S3擴展請求ID:re2sdbzf8MMqGAyrNQOoqYJ8EdXERoWE7cjG + UpfAtFuP5IeAbXmk6Riw + PX8Uw3Jcspn1rSQvI =
這是設置MD5的正確方法?
注:如果沒有設置MD5(即objectmetadata未設置),然後上傳作品不
它工作時,我使用Base64.encodeToString(lBytes,Base64.WRAP),而不是Base64.encodeToString(lBytes,Base64.DEFAULT); – Max 2014-11-24 03:53:55