2014-10-06 30 views
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未设置),然后上传作品不

+0

它工作时,我使用Base64.encodeToString(lBytes,Base64.WRAP),而不是Base64.encodeToString(lBytes,Base64.DEFAULT); – Max 2014-11-24 03:53:55

回答

1

我也遇到这种类型的问题..

我固定加入Base64.DEFAULT,而不是任何异常其他人如WRAPNO_WRAP