2016-04-05 12 views
8

Sebbene assomiglino ai file, gli oggetti in Amazon S3 non sono realmente "file", proprio come i bucket S3 non sono realmente directory. Su un sistema Unix posso usare head per visualizzare in anteprima le prime righe di un file, non importa quanto sia grande, ma non posso farlo su un S3. Quindi come faccio una lettura parziale su S3?S3: Come eseguire una lettura/ricerca parziale senza scaricare il file completo?

risposta

14

I file S3 possono essere enormi, ma non è necessario recuperare l'intero contenuto solo per leggere i primi pochi byte. Le API S3 supportano l'intestazione HTTP Range:(see RFC 2616), che accetta un argomento dell'intervallo di byte.

Basta aggiungere un'intestazione Range: bytes=0-NN alla richiesta S3, in cui NN è il numero richiesto di byte da leggere e si recupereranno solo quei byte anziché leggere l'intero file. Ora puoi visualizzare in anteprima il file CSV da 900 GB che hai lasciato in un secchio S3 senza attendere il download dell'intero dispositivo. Leggi the full GET Object docs sui documenti dello sviluppatore di Amazon.

+2

Esempio chiamata S3: aws s3api get-object --bucket my_bucket --key percorso/a/my/file/file1.gz file1.gz --range byte = 1000-2000 –

2

L'SDK di AWS .Net mostra solo le gamme a terminazione fissa (RE: public ByteRange(long start, long end)). Cosa succede se voglio iniziare nel mezzo e leggere fino alla fine? Un intervallo HTTP di Range: bytes=1000- è perfettamente accettabile per "iniziare alle 1000 e leggere fino alla fine". Non credo che abbiano consentito questo nella libreria .Net.

Problemi correlati