Ich schreibe einen Webserver in go.http Request.FormFile: Zip-Dateien behandeln?
Auf einer der Seiten kann der Benutzer eine Datei hochladen.
Ich würde gerne mit Zip-Dateien umgehen können.
Im archive/zip
Paket sehe ich nur zwei Funktionen, die mir erlauben, von einem Zip-Archiv zu lesen:
func OpenReader(name string) (*ReadCloser, error)
func NewReader(r io.ReaderAt, size int64) (*Reader, error)
Ich möchte schreiben vermeiden und das Lesen zurück von der Platte,
Wenn ich die zweite Funktion verwenden möchte, muss ich die Größe der hochgeladenen Datei vor dem Aufruf der Funktion wissen.
Frage
Ich werde meine Frage in zwei Teile geteilt:
Was wäre der idiomatische Weg, um den entpackten Inhalt einer Zip-Datei über einen Standard-
multipart/form-data
HTML-Formular hochgeladen zu lesen?Wie kann ich die tatsächliche Größe einer über ein HTML-Formular hochgeladenen Datei erhalten?
func(req *http.Request) { f, h, err := req.FormFile("fileTag") if err != nil { panic(err) } var fileSize int = ?? unzipper, err := zip.NewReader(f, fileSize) }
funktioniert die Mime-Header-Lösung aus meiner Antwort nicht? Wenn Sie eine Inhaltslänge vermissen, ist diese Lösung eigentlich sehr gut, da ich nicht glaube, dass es einen Weg gibt, es in einen Puffer ohne mindestens eine Kopie zu bringen. – JimB