S3: Wie kann man partiell lesen / suchen, ohne die komplette Datei herunterzuladen?

8

Obwohl sie Dateien ähneln, sind Objekte in Amazon S3 nicht wirklich "Dateien", genau wie S3-Buckets nicht wirklich Verzeichnisse sind. Auf einem Unix-System kann ich head verwenden, um die ersten paar Zeilen einer Datei anzuzeigen, egal wie groß sie ist, aber ich kann dies nicht auf einem S3 tun. Also, wie mache ich eine Teillesung auf S3?

    
jm3 05.04.2016, 20:08
quelle

2 Antworten

15

S3-Dateien können riesig sein, aber Sie müssen nicht das ganze Ding holen, nur um die ersten paar Bytes zu lesen. Die S3-APIs unterstützen den Header HTTP Range: (siehe RFC 2616) . die ein Bytebereichargument nehmen.

Fügen Sie einfach einen Range: bytes=0-NN -Header zu Ihrer S3-Anfrage hinzu, wobei NN die angeforderte Anzahl der zu lesenden Bytes ist, und Sie werden nur diese Bytes abrufen, anstatt die gesamte Datei zu lesen. Jetzt können Sie eine Vorschau der 900-GB-CSV-Datei anzeigen, die Sie in einem S3-Bucket gelassen haben, ohne auf das Herunterladen der gesamten Datei warten zu müssen. Lesen Sie die vollständigen GET Object docs in den Amazon-Entwicklerdokumenten.

    
jm3 05.04.2016, 20:08
quelle
2

Das AWS .Net SDK zeigt nur Bereiche mit festem Ende an (RE: public ByteRange(long start, long end) ). Was, wenn ich in der Mitte anfangen und bis zum Ende lesen möchte? Ein HTTP-Bereich von Range: bytes=1000- ist vollkommen akzeptabel für "starte bei 1000 und lies bis zum Ende" Ich glaube nicht, dass sie dies in der .Net-Bibliothek erlaubt haben.

    
Rick W 08.02.2017 15:18
quelle

Tags und Links