2009-06-04 3 views
3

Ich möchte die Dateien in einer ZIP-Datei extrahieren, die ich in meine Rails-App hochgeladen habe. Die Dateien in der ZIP-Datei werden in der Datenbank gespeichert.Öffnen einer Multipart/Formulardaten-ZIP-Datei mit Rubyzip

Ich möchte die ZIP-Datei in meiner Aktion öffnen, ohne zuerst die Datei in einem Ordner speichern zu müssen - ich möchte den multipart/form-Datenstrom mit Rubyzip öffnen.

Es sieht aus wie rubyzip ZipFile.open nimmt nur einen Dateinamen - kein IO-Stream.

Was muss ich innerhalb rubyzip zu ändern, mir zu erlauben, die Zip-Datei als Stream zu öffnen, wie folgt aus:

Zip::ZipFile.open(params["zip_file"]) do |zip_file| 
... 
end 

Dank. Joerg

Antwort

4

Mit

Zip::ZipFile.open(params["zip_file"].path) do |zip_file| 
... 
end 

funktionieren sollte.

4

Ich werde Ihnen einen Rat geben, den Sie nicht gefragt haben.

Ich würde dringend empfehlen, dass Sie diese Operation nicht innerhalb Ihrer Aktion ausführen, da dies den Rails-Prozess blockiert, der mit dieser HTTP-Anfrage verknüpft ist, solange die Extrahierung durchgeführt wird. Ihre Benutzeroberfläche für diesen Benutzer wird nicht mehr reagieren und wenn genug Benutzer dies gleichzeitig tun (Sie begrenzen die Größe des Datei-Uploads, richtig?), Dann haben Sie effektiv eine Denial of Service Attacke gegen Ihre Anwendung.

  • Initiieren Sie die Extraktion als asynchronen Hintergrundauftrag aus Ihrer Aktion.
+1

Ja, ich mache es normalerweise asynchron, aber in diesem speziellen Fall darf die Datei nicht zuerst gespeichert werden. Es ist ein internes System mit nur einer Handvoll Menschen, die Zugang dazu haben. Trotzdem danke. – Joerg

Verwandte Themen