Amazon S3 업로드 파일 및 URL 가져 오기
한 번의 작업으로 txt / pdf / png 파일을 Amazon S3에 업로드하고 업로드 된 파일 URL을 응답으로 오류 수? 설명 AWS Java SDK는 Java struts2 웹 애플리케이션에 추가해야하는 올바른 라이브러리입니다.
이것에 대한 해결책을 제안하십시오.
업로드하기 전에 파일 #withCannedAcl
을 사용할 수 있습니다 PutObjectRequest
.
myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
아니요 한 번의 작업으로 URL을 얻을 수 없지만 두 가지 :)
우선, 아무도 액세스 할 수없는 URL을 얻는 것이 이치에 맞지 않기 때문에 업로드하기 전에 파일을 공개해야합니다. Michael Astreiko가 제안한대로 ACL을 설정합니다. getResourceUrl
또는 을 호출하여 리소스 URL을 수 있습니다 getUrl
.
AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(new PutObjectRequest("your-bucket", "some-path/some-key.jpg", new File("somePath/someKey.jpg")).withCannedAcl(CannedAccessControlList.PublicRead))
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg");
주 : 서로 다른 사이 getResourceUrl
및 getUrl
예외가 발생했을 때 getResourceUrl이 null을 돌려주는 것입니다.
참고 2 : getUrl
메서드는 AmazonS3 인터페이스에 정의되어 있지 않습니다. 표준 빌더를 사용하는 경우 객체를 AmazonS3Client로 캐스팅해야합니다.
요청할 수있는 버킷과 파일 이름이 주어지면 스스로 할 수 있습니다.
예를 들어 버킷이있는 경우 mybucket
이름이 myfilename
다음 과 같은 경우 :
https://mybucket.s3.amazonaws.com/myfilename
s3
비트는 버킷에있는 지역에 따라 다를 수 있습니다 내 URL이 같은 그래서 예를 들어, 나는 동남아시아 영역을 사용합니다. :
https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
s3Client를 통해 링크를 통해 사용할 수 있습니다.
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
조금 오래되어 미래에 이것에 걸림돌이되는 사람에게는 여전히
CredentialProvider AmazonS3Client를 이미 작성하고 가정하고 한 줄로 수행 할 수 있습니다.
다음과 같이 보일 것입니다.
String ImageURL = String.valueOf(s3.getUrl(
ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To
file.getName())); //The key for the uploaded object
CredentialProvider 및 AmazonS3Client를 작성하지 않은 경우 다음과 같은 URL을 가져 오기 전에 추가하십시오.
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"POOL_ID", // Identity pool ID
Regions.US_EAST_1 // Region
);
@hussachai 및 @Jeffrey Kemp 답변은 좋습니다. 그러나 그들은 반환 된 URL이 경로 스타일이 아니라 가상 호스트 스타일이라는 공통점이 있습니다. s3 URL 스타일에 대한 자세한 내용은 AWS S3 URL 스타일을 참조하십시오 . 어떤 사람들은 경로 스타일 s3 URL을 생성하고 싶어합니다. 여기에 단계가 있습니다. 기본적으로 모든 것이 @hussachai 및 @Jeffrey Kemp 답변과 동일하며 같이 한 줄 설정 만 변경됩니다.
AmazonS3Client s3Client = (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion("us-west-2")
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.withPathStyleAccessEnabled(true)
.build();
// Upload a file as a new object with ContentType and title specified.
PutObjectRequest request = new PutObjectRequest(bucketName, stringObjKeyName, fileToUpload);
s3Client.putObject(request);
URL s3Url = s3Client.getUrl(bucketName, stringObjKeyName);
logger.info("S3 url is " + s3Url.toExternalForm());
다음과 같은 URL이 생성됩니다. https://s3.us-west-2.amazonaws.com/mybucket/myfilename
System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());
이를 통해 S3 버킷에 이미 업로드 된 파일의 링크를 검색 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/10975475/amazon-s3-upload-file-and-get-url
'ProgramingTip' 카테고리의 다른 글
GDB 중단 점을 지정된 횟수에 도달 한 후에 만 중단하는 방법은 무엇입니까? (0) | 2020.10.07 |
---|---|
Java 소켓 API : 연결이 닫혔는지 확인하는 방법은 무엇입니까? (0) | 2020.10.07 |
CSS 전환 중 Webkit 텍스트 변경을 방지하는 방법 (0) | 2020.10.07 |
지우기 아이콘으로 IE10에서 텍스트 입력을 지울 때 발생하는 이벤트 (0) | 2020.10.07 |
이 null 검사와 비어 있지 않은 검사를 그루비로 작성하는 더 좋은 방법이 있습니까? (0) | 2020.10.07 |