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

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

AWS SDK for Java를 사용하여 미리 서명된 URL을 생성할 수 있습니다. 그러면 여러분과 여러분이 이 URL을 알려준 사람들이 이 URL을 사용하여 Amazon S3에 객체를 업로드할 수 있습니다. URL을 사용하여 객체를 업로드하는 경우 Amazon S3에서는 지정된 버킷에 객체를 생성합니다. 미리 서명된 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(); } } }