Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

미리 서명된 URL을 사용하는 객체 업로드(AWS SDK for Java)

AWS SDK for Java를 사용하여 미리 서명된 URL을 생성할 수 있습니다. 그러면 이 URL을 제공받은 누구나 이 URL을 사용하여 Amazon S3에 객체를 업로드할 수 있습니다. URL을 사용하여 객체를 업로드하는 경우 가 지정된 버킷에 객체를 생성합니다. 미리 서명된 URL에 지정된 동일한 키를 사용하는 객체가 버킷에 이미 있으면 Amazon S3는 업로드된 객체로 기존 객체를 바꿉니다. 업로드를 성공적으로 완료하려면 다음을 수행해야 합니다.

  • GeneratePresignedUrlRequestHttpURLConnection 객체를 생성할 때 HTTP PUT 동사를 지원합니다.

  • 업로드 완료 후 몇 가지 방식으로 HttpURLConnection 객체와 상호 작용합니다. 다음 예제에서는 HttpURLConnection 객체를 사용하여 상호 작용하여 HTTP 응답 코드를 확인합니다.

이 예제에서는 미리 서명된 URL을 생성한 후 사용하여 샘플 데이터를 객체로 업로드합니다. 실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 단원을 참조하십시오.

import java.io.IOException; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import com.amazonaws.AmazonServiceException; import com.amazonaws.HttpMethod; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; import com.amazonaws.services.s3.model.S3Object; public class GeneratePresignedUrlAndUploadObject { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; String objectKey = "*** Object key ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Set the pre-signed URL to expire after one hour. java.util.Date expiration = new java.util.Date(); long expTimeMillis = expiration.getTime(); expTimeMillis += 1000 * 60 * 60; expiration.setTime(expTimeMillis); // Generate the pre-signed URL. System.out.println("Generating pre-signed URL."); GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey) .withMethod(HttpMethod.PUT) .withExpiration(expiration); URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest); // Create the connection and use it to upload the new object using the pre-signed URL. HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("PUT"); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); out.write("This text uploaded as an object via presigned URL."); out.close(); // Check the HTTP response code. To complete the upload and make the object available, // you must interact with the connection object in some way. connection.getResponseCode(); System.out.println("HTTP response code: " + connection.getResponseCode()); // Check to make sure that the object was uploaded successfully. S3Object object = s3Client.getObject(bucketName, objectKey); System.out.println("Object " + object.getKey() + " created in bucket " + object.getBucketName()); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }