2014-10-06 89 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