복붙노트

[SPRING] 컬링 경로를 통해 Amazon S3에 업로드

SPRING

컬링 경로를 통해 Amazon S3에 업로드

스프링 부트를 통해 파일 업로드 REST API를 설정하려고합니다.

나는 현재 버킷에 존재하는 객체들의리스트를 반환하는 list / GET method curl http : // localhost : 8080 / api / aws / s3 / list를 가지고있다.

업로드의 경우 다음과 같이 시도했습니다.

curl -F "data=@test.txt" http://localhost:8080/api/aws/s3/upload -i

어떤 생산 :

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Sun, 25 Jun 2017 23:28:36 GMT
X-Application-Context: application
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked

그러나 버킷을 보면 새 파일로 업데이트되지 않았습니다.

이것이 AWS의 사용 권한 문제일까요? 내 계정에만 읽기 및 쓰기 권한이 있습니다. 내가 만든 사용자와 그룹에는 관리자 권한이 있습니다. 버킷 정책을 추가하지 않았습니다. 이것은 CORS 구성입니다.

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

봄에 S3 컨트롤러의 업로드 섹션은 다음과 같습니다.

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public List<PutObjectResult> upload(@RequestParam("file") MultipartFile[] multipartFiles) {
    return s3Wrapper.upload(multipartFiles);
}

해결법

  1. ==============================

    1.S3 용 버켓 이름과 일부 매개 변수를 지정해야합니다. 그리고 POST가 아니라 PUT이라고 생각합니다. 인터넷에 몇 가지 명령 줄 샘플이 있습니다.

    S3 용 버켓 이름과 일부 매개 변수를 지정해야합니다. 그리고 POST가 아니라 PUT이라고 생각합니다. 인터넷에 몇 가지 명령 줄 샘플이 있습니다.

    file=/path/to/file/to/upload.tar.gz
    bucket=your-bucket
    resource="/${bucket}/${file}"
    contentType="application/x-compressed-tar"
    dateValue=`date -R`
    stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
    s3Key=xxxxxxxxxxxxxxxxxxxx
    s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
    curl -X PUT -T "${file}" \
      -H "Host: ${bucket}.s3.amazonaws.com" \
      -H "Date: ${dateValue}" \
      -H "Content-Type: ${contentType}" \
      -H "Authorization: AWS ${s3Key}:${signature}" \
      https://${bucket}.s3.amazonaws.com/${file}
    
  2. ==============================

    2.내 컨트롤러에서 설정 한 매개 변수가 파일 이었지만 내 컬 경로에서 데이터를 계속 사용했기 때문입니다.

    내 컨트롤러에서 설정 한 매개 변수가 파일 이었지만 내 컬 경로에서 데이터를 계속 사용했기 때문입니다.

  3. from https://stackoverflow.com/questions/44751574/uploading-to-amazon-s3-via-curl-route by cc-by-sa and MIT license