2016-04-05 16 views
8

Mặc dù chúng giống với các tệp, các đối tượng trong S3 của Amazon không thực sự là "tệp", giống như các thùng S3 không thực sự là thư mục. Trên một hệ thống Unix, tôi có thể sử dụng head để xem trước một vài dòng đầu tiên của một tệp, cho dù nó có lớn bao nhiêu, nhưng tôi không thể thực hiện điều này trên S3. Vì vậy, làm thế nào để làm một phần đọc trên S3?S3: Làm thế nào để thực hiện một phần đọc/tìm kiếm mà không cần tải xuống tệp hoàn chỉnh?

Trả lời

14

Tệp S3 có thể rất lớn, nhưng bạn không phải tìm nạp toàn bộ nội dung chỉ để đọc một vài byte đầu tiên. API S3 hỗ trợ tiêu đề HTTP Range: tiêu đề (see RFC 2616), có tham số phạm vi byte.

Chỉ cần thêm tiêu đề Range: bytes=0-NN vào yêu cầu S3 của bạn, trong đó NN là số byte được yêu cầu để đọc và bạn sẽ chỉ tìm nạp các byte đó thay vì đọc toàn bộ tệp. Bây giờ bạn có thể xem trước tập tin CSV 900 GB mà bạn đã để lại trong một thùng S3 mà không phải đợi toàn bộ nội dung tải xuống. Đọc the full GET Object docs trên tài liệu dành cho nhà phát triển của Amazon.

+2

Cuộc gọi mẫu S3: aws s3api get-đối tượng --bucket my_bucket --key path/to/my/file/file1.gz file1.gz --range bytes = 1000-2000 –

2

SDK AWS .Net chỉ hiển thị phạm vi kết thúc cố định là có thể (RE: public ByteRange(long start, long end)). Nếu tôi muốn bắt đầu ở giữa và đọc đến cùng thì sao? Một phạm vi HTTP là Range: bytes=1000- hoàn toàn có thể chấp nhận được cho "bắt đầu ở 1000 và đọc đến cuối" Tôi không tin rằng họ đã cho phép điều này trong thư viện .Net.

Các vấn đề liên quan