Amazon S3에서 지정된 확장자의 파일에 대한 컨텐츠 유형을 반복적으로 변경


12

정적 .json 및 .md 파일을 포함하는 중첩 된 "폴더"구조를 가진 큰 S3 버킷이 있습니다. 이러한 파일은 S3 text/plain에서 올바른 application/jsontext/markdown.

새 업로드에 올바른 콘텐츠 유형이 포함되도록 버킷 기본값을 업데이트했습니다.

"확장"을 걷고 특정 확장자와 일치하는 파일의 컨텐츠 유형을 업데이트하는 가장 좋은 방법은 무엇입니까?

답변:


25

다음은 aws cli 도구로이를 수행하는 방법의 예입니다. cp 도구를 사용하면 재귀 옵션을 사용할 수 있지만 s3api 도구로는 할 수 없다고 생각합니다. 이 경우 많은 SVG를 수정하고 있습니다. --dryrun 옵션을 해제 할 준비가되면 제거하십시오.

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/

나는 명령의 기본 개념을 이해합니다. 그러나 이것은 파일이 replace 지시자이므로 파일의 버전을 삭제합니까? 내 버킷은 버전 관리로 구성되며 각 파일에는 일부 버전이 있습니다. 교체하면 모든 버전이 삭제되고 새 파일이 생성되거나 교체 중에 모든 버전이 고려됩니까?
Joze

그건 좋은 질문이야. 버림받은 버킷에서 테스트할만한 가치가 있습니다. 메타 데이터 만
바꾸라

테스트를 해본 결과 버전이 유지되지만 메타 데이터 수정 버전이 최신 버전이되고 이전 버전에는 이전 메타 데이터가 있습니다. 나는 모든 버전의 메타 데이터를 재귀 적으로 수정하는 방법을 찾으려고 노력하고있다. 즉, 모든 버전을 나열하고 메타 데이터를 수정하는 복잡한 스크립트를 만들지 않고있다.
Joze

이 명령은 acl을 재설정합니다. 기본값이 아닌 값이 필요한 경우--acl=...
Vasiliy Zverev

3

boto / python 또는 다른 AWS API를 사용하여 손을 더럽 히지 않으려면 플래그 $ aws s3api copy-object와 함께 --content-type객체를 복사하여 새 콘텐츠 유형을 설정하는 것이 가장 좋습니다 .

다음 은 s3api에 대한 설명서 입니다.

전체 버킷에서 재귀 적으로 실행하기 전에 먼저 테스트해야한다는 것은 말할 필요도 없습니다.


1
테스트와 관련하여 Amazon CLI에서 "dry run"플래그를 사용하십시오.
bart

3

파고 난 후에 s3cmd도구가 이것을 할 수 있음을 발견했습니다 . 예를 들어 JSON 파일을 application / json으로 설정하려면 다음을 수행하십시오.

s3cmd --recursive modify --acl-public \
       --add-header='content-type':'application/json' \
       --exclude '' --include '.json' \
       s3://bucket/

3

앞에서 언급했듯이 awsAmazon의 도구를 사용하고 s3api를 사용하여 객체를 복사 metadata-directive=REPLACE하고 콘텐츠 유형을 변경하는 데 사용할 수 있습니다.

때로는 데이터베이스에 저장된 파일 이름을 반복하고 싶기 때문에 여기에 넣습니다. 이것이 cli를 통해 수행 할 수있는 방법입니다.

aws s3api copy-object \
          --content-type="application/vnd.android.package-archive" \
          --metadata-directive="REPLACE" \
          --copy-source "MYBUCKET/FILE.apk" \
          --bucket "MYBUCKET" \
          --key "FILE.apk" \
          --acl public-read

이것은 하나의 파일 만 대체합니다. .apk 유형의 모든 파일에 대해이 명령을 어떻게 실행합니까?
bart

@ bart는 재귀 방식에 대한 대답을 봅니다.
t1m0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.