2016-07-29 4 views
0

나는 성공적으로 AWS S3에 여러 부분으로 파일을 업로드하고 있지만, 지금은 각 부분에 광고에 MD5 체크섬을하려고 해요 :AWS S3 다중 파트 업로드를위한 md5 체크섬을 생성하는 방법은 무엇입니까?

static void sendPart(existingBucketName, keyName, multipartRepsonse, partNum, 
        sendBuffer, partSize, vertx, partETags, s3, req, resultClosure) 
{ 

    // Create request to upload a part. 
    MessageDigest md = MessageDigest.getInstance("MD5") 
    byte[] digest = md.digest(sendBuffer.bytes) 
    println(digest.toString()) 
    InputStream inputStream = new ByteArrayInputStream(sendBuffer.bytes) 
    UploadPartRequest uploadRequest = new UploadPartRequest() 
     .withBucketName(existingBucketName).withKey(keyName) 
     .withUploadId(multipartRepsonse.getUploadId()).withPartNumber(partNum) 
     .withInputStream(inputStream) 
     .withMD5Digest(Base64.getEncoder().encode(digest).toString()) 
     .withPartSize(partSize); 

    // Upload part and add response to our list. 
    vertx.executeBlocking({ future -> 

      // Do the blocking operation in here 

      // Imagine this was a call to a blocking API to get the result 
      try { 
       println("Sending chunk for ${keyName}") 
       PartETag eTag = s3.uploadPart(uploadRequest).getPartETag() 
       partETags.add(eTag); 
       println("Etag: " + eTag.ETag) 
       req.response().write("Sending Chunk\n") 
      } catch(Exception e) { 
      } 

      def result = "success!" 

      future.complete(result) 
     }, resultClosure) 
} 

나는 다음과 같은 오류 얻을 그러나 :

AmazonS3Exception: The XML you provided was not well-formed or did not validate against our published schema (Service: Amazon S3; Status Code: 400; Error Code: MalformedXML; Request ID: 91542E819781FDFC), S3 Extended Request ID: yQs45H/ozn5+xlxV9lRgCQWwv6gQysT6A4ablq7/Epq06pUzy0qGvMc+YAkJjo/RsHk2dedH+pI=

을 내가 뭘 잘못하고 있니?

답변

0

내가 다이제스트를 잘못 변환 한 것처럼 보입니다.

static void sendPart(existingBucketName, keyName, multipartRepsonse, partNum, 
        sendBuffer, partSize, vertx, partETags, s3, req, resultClosure) 
{ 

    // Create request to upload a part. 
    MessageDigest md = MessageDigest.getInstance("MD5") 
    byte[] digest = md.digest(sendBuffer.bytes) 
    InputStream inputStream = new ByteArrayInputStream(sendBuffer.bytes) 
    UploadPartRequest uploadRequest = new UploadPartRequest() 
     .withBucketName(existingBucketName).withKey(keyName) 
     .withUploadId(multipartRepsonse.getUploadId()).withPartNumber(partNum) 
     .withInputStream(inputStream) 
     .withMD5Digest(Base64.getEncoder().encodeToString(digest)) 
     .withPartSize(partSize) 

    // Upload part and add response to our list. 
    vertx.executeBlocking({ future -> 

      try { 
       println("Sending chunk for ${keyName}") 
       PartETag eTag = s3.uploadPart(uploadRequest).getPartETag() 
       partETags.add(eTag); 
       req.response().write("Sending Chunk\n") 
      } catch(Exception e) { 
      } 

      def result = "success!" 

      future.complete(result) 
     }, resultClosure) 
} 
관련 문제