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