2016-01-23 3 views
0

Я пытаюсь создать назначенный AWS URL-адрес с содержанием MD5. Ссылка генерировать, но когда я использую его для загрузки контента, который он терпит неудачу с HTTP 403. ошибкаJava AWS s3: Как установить и загрузить контент с предварительно подписанным адресом Md5

Java кода для генерации presigned URL, как показано ниже:

GeneratePresignedUrlRequest generatePresignedUrlRequest = new  GeneratePresignedUrlRequest(bucketName, key, httpMethod); 
    byte[] resultByte = DigestUtils.md5(/*byte array*/);  
    String streamMD5 = new String(java.util.Base64.getEncoder().encode(resultByte)); 
    generatePresignedUrlRequest.setContentMd5(streamMD5); 
    s3Client.generatePresignedUrl(generatePresignedUrlRequest); 

Java код для загрузки данных с использованием предварительно подписана url:

HttpURLConnection connection; 
    try { 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("PUT"); 
     OutputStream output = connection.getOutputStream(); 
     output.write(getImage()); 
     output.flush(); 
     assertEquals(OK, connection.getResponseCode()); 
    } catch (IOException e) { 
     LOGGER.info("Exception: {}", e); 
    } 

Я не уверен, что нужно добавить в код загрузки, чтобы заставить его работать.

ответ

0

я был в состоянии решить, добавив следующий фрагмент кода:

byte[] resultByte = DigestUtils.md5(/*byte array*/);  
String streamMD5 = new String(java.util.Base64.getEncoder().encode(resultByte)); 
connection.setRequestProperty("content-md5", streamMD5); 

Убедитесь, что MD5 код, который вы добавите при строительстве предварительно подписанного URL такой же, как используется для установки «Content-md5» заголовок ,