Thay đổi đệ quy loại nội dung cho các tệp của tiện ích mở rộng đã cho trên Amazon S3


12

Tôi có một thùng S3 lớn với cấu trúc "thư mục" lồng nhau chứa (trong số những thứ khác) các tệp .json và .md tĩnh. Các tệp luận án đang được S3 phục vụ text/plainthay vì chính xác application/jsontext/markdown.

Tôi đã cập nhật các giá trị mặc định của xô để các tệp tải lên mới sẽ có loại nội dung chính xác.

Cách tốt nhất để đi bộ "cây" và cập nhật loại nội dung cho các tệp khớp với một phần mở rộng nhất định là gì?

Câu trả lời:


25

Dưới đây là một ví dụ về cách thực hiện việc này với công cụ aws cli. Công cụ cp cho phép sử dụng các tùy chọn đệ quy, điều mà tôi không nghĩ rằng công cụ s3api có thể làm được. Trong trường hợp này, tôi đang sửa một loạt các SVG. Xóa các tùy chọn --dryrun khi bạn sẵn sàng giải phóng nó.

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

Tôi hiểu khái niệm cơ bản của lệnh. Nhưng điều này sẽ xóa các phiên bản của tập tin vì nó là một chỉ thị thay thế? Xô của tôi được cấu hình với phiên bản và mỗi tệp có một số phiên bản. Thay thế nó sẽ xóa tất cả các phiên bản và tạo một tệp mới hoặc nó sẽ tính đến tất cả các phiên bản trong quá trình thay thế?
Jože

Đó là một câu hỏi hay. Chắc chắn giá trị một bài kiểm tra trong một xô ném. Hy vọng của tôi là yêu cầu thay thế siêu dữ liệu sẽ không thổi bay các phiên bản nhưng ...
t1m0

Tôi đã thực hiện một thử nghiệm và hóa ra các phiên bản vẫn ở lại, tuy nhiên phiên bản sửa đổi siêu dữ liệu trở thành phiên bản mới nhất, các phiên bản cũ hơn có siêu dữ liệu trước đó. Tôi đang cố gắng tìm cách sửa đổi đệ quy siêu dữ liệu của tất cả các phiên bản bây giờ, đó là không tạo một tập lệnh phức tạp sẽ liệt kê mọi phiên bản và sau đó sửa đổi siêu dữ liệu của nó ...
Joze

Lệnh này đặt lại acl. Nếu bạn cần giá trị không mặc định, hãy thêm--acl=...
Vasiliy Zverev

3

Trừ khi bạn muốn để có được bàn tay dơ bẩn của bạn sử dụng boto / python hoặc API AWS khác, tôi nghi ngờ đặt cược tốt nhất của bạn sẽ được sử dụng $ aws s3api copy-objectvới --content-typelá cờ để sao chép một đối tượng riêng của mình, thiết lập các kiểu nội dung mới.

Đây là tài liệu cho s3api.

Không cần phải nói rằng bạn nên kiểm tra cái này trước, trước khi chạy nó một cách đệ quy trên toàn bộ thùng của bạn.


1
Về thử nghiệm, hãy sử dụng cờ "chạy khô" trong Amazon CLI.
bart

3

Sau khi đào một số, tôi thấy rằng s3cmdcông cụ có thể làm điều này. Ví dụ: để đặt các tệp JSON thành application / json:

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

3

Như đã đề cập trước đó, bạn có thể sử dụng awscông cụ của Amazon và sử dụng s3api để sao chép đối tượng vào chính nó và sử dụng metadata-directive=REPLACEđể thay đổi loại nội dung.

Tôi đang đặt điều này ở đây, bởi vì đôi khi bạn muốn lặp lại tên tệp được lưu trữ trong cơ sở dữ liệu và đây là cách bạn có thể thực hiện thông qua 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

Điều này chỉ thay thế một tập tin. Làm thế nào để bạn thực hiện lệnh này đối với tất cả các tệp loại .apk?
bart

@bart xem câu trả lời của tôi cho cách đệ quy.
t1m0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.