2016-04-05 24 views
8

Dosyalara benzemelerine rağmen, Amazon S3'teki nesneler, S3 paketlerinin gerçekten dizin olmadığı gibi gerçekten "dosya" değildir. Bir Unix sisteminde, ne kadar büyük olursa olsun, bir dosyanın ilk birkaç satırını önizlemek için head kullanabilirim, ancak bunu S3'te yapamıyorum. Öyleyse S3 üzerinde nasıl kısmi bir okuma yapacağım?S3: Tam dosyayı indirmeden kısmi bir okuma/arama nasıl yapılır?

cevap

14

S3 dosyaları çok büyük olabilir, ancak yalnızca ilk birkaç baytı okumak için tüm şeyi almanız gerekmez. S3 API'ları bayt aralığı argümanını alan HTTP Range: başlığını (see RFC 2616) destekler.

S3 isteğinize bir Range: bytes=0-NN başlığı ekleyin; burada NN, okunması istenen istenen bayt sayısıdır ve tüm dosyayı okumak yerine yalnızca bu baytları getirirsiniz. Artık tüm şeyin indirilmesini beklemeden bir S3 kabında bıraktığınız 900 GB CSV dosyasını önizleyebilirsiniz. Amazon'un geliştirici dokümanlarında the full GET Object docs'u okuyun.

+2

Örnek S3 çağrısı: aws s3api get-object --bucket my_bucket --key yolu/için/my/dosya/dosya1.gz file1.gz --range bytes = 1000-2000 –

2

AWS .Net SDK sadece yalnızca sabit uçlu aralıkların olduğunu gösterir (RE: public ByteRange(long start, long end)). Ya ortada başlamak ve sonuna kadar okumak istersem? Bir HTTP aralığı Range: bytes=1000-, "1000'de başlat ve sonuna kadar oku" için kesinlikle kabul edilebilir. Bunların .Net kitaplığında buna izin verdiğine inanmıyorum.

İlgili konular