programing

Amazon S3 업로드 및 URL 가져오기

projobs 2023. 2. 3. 21:21
반응형

Amazon S3 업로드 및 URL 가져오기

txt/pdf/png 파일을 Amazon S3에 한 번에 업로드하여 업로드한 파일 URL을 응답으로 얻을 수 있습니까?

그렇다면 AWS Java SDK가 Java struts2 웹 어플리케이션에 추가해야 하는 라이브러리가 맞습니까?

이에 대한 해결책을 제시해 주세요.

아니요, URL은 1개의 액션으로 취득할 수 없습니다.단, 2개의 액션으로 취득할 수 있습니다. : )

우선, 아무도 접근할 수 없는 URL을 얻는 것은 의미가 없기 때문에 업로드 전에 파일을 공개해야 할 수 있습니다.이를 수행하려면 Michael Astreiko의 제안대로 ACL을 설정합니다.리소스 URL은 다음 중 하나를 통해 얻을 수 있습니다.getResourceUrl또는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");

주의 1: 다음 중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

AWS SDK 2+의 경우

String key = "filePath";
String bucketName = "bucketName";
PutObjectResponse response = s3Client
            .putObject(PutObjectRequest.builder().bucket(bucketName ).key(key).build(), RequestBody.fromFile(file));
 GetUrlRequest request = GetUrlRequest.builder().bucket(bucketName ).key(key).build();
 String url = s3Client.utilities().getUrl(request).toExternalForm();

@hussachai와 @Jeffrey Kemp의 답변은 꽤 좋습니다.그러나 반환되는 URL이 경로 스타일이 아닌 가상 호스트 스타일이라는 공통점이 있습니다.s3 URL 스타일에 대한 자세한 내용은 AWS S3 URL Styles를 참조하십시오.path style 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());

https://s3.us-west-2.amazonaws.com/mybucket/myfilename과 같은 URL이 생성됩니다.

마찬가지로 s3Client를 통해 링크하는 경우에도 아래를 사용할 수 있습니다.

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));

조금 낡았지만, 장래에 이것을 우연히 발견하는 사람을 위해서:

Credential Provider와 AmazonS3 Client를 이미 작성했다고 가정하면 한 줄로 작업을 수행할 수 있습니다.

다음과 같이 표시됩니다.

 String ImageURL = String.valueOf(s3.getUrl(
                                  ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To
                                  file.getName())); //The key for the uploaded object

Credential Provider와 Amazon S3 Client를 작성하지 않은 경우 다음과 같은 URL을 얻기 전에 추가합니다.

  CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
        getApplicationContext(),
        "POOL_ID", // Identity pool ID
        Regions.US_EAST_1 // Region
);

다음 메서드는 버킷의 특정 폴더에 있는 파일을 업로드하고 업로드한 파일의 생성된 URL을 반환합니다.

private String uploadFileToS3Bucket(final String bucketName, final File file) {
    final String uniqueFileName = uploadFolder + "/" + file.getName();
    LOGGER.info("Uploading file with name= " + uniqueFileName);
    final PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, uniqueFileName, file);
    amazonS3.putObject(putObjectRequest);
    return ((AmazonS3Client) amazonS3).getResourceUrl(bucketName, uniqueFileName);
}

사용하는 AWS-SDK는data URL 이 .data.Location

const AWS = require('aws-sdk')
const s3 = new AWS.S3(config)

s3.upload(params).promise()
    .then((data)=>{
        console.log(data.Location)
    })
    .catch(err=>console.log(err))

System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

이 코드를 사용하면 이미 업로드된 파일의 링크를 S3 버킷으로 가져올 수 있습니다.

전에 하려면 , 「」를 합니다.#withCannedAcl의 of의 PutObjectRequest:

myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket',  'somePath/someKey.jpg', new    File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))

String url = myAmazonS3Client.getUrl('some-grails-bucket',  'somePath/someKey.jpg').toString();

언급URL : https://stackoverflow.com/questions/10975475/amazon-s3-upload-file-and-get-url

반응형