2016-05-13 7 views
1

Ich mache ein Upload-Formular für Reißverschlüsse in einer Ruby Webmachine App. Meine Idee ist es, einen Upload über mein Backend zu haben, wo ich einige zusätzliche Parameter hinzufügen und dann mit dem RestClient auf den Dienst von amazon s3 hochladen kann.(Multipart) zip-upload in rubin webmachine von rack behandelt

Ich habe erfolgreich einen direkten Upload (webbasierter Form Post) zu einem s3bucket erstellt, aber auf diese Weise kann ich nicht mit den Variablen umgehen, die in der Anfrage benötigt werden, so wie ich es möchte.

Ich habe mehrere Dinge ausprobiert, aber ich kann nicht herausfinden, wie mit der Anfrage umzugehen ist, sobald es in meinem Backend ankommt. Ich habe eine Ressource erstellt und debugge direkt in der process_post Methode.

Meine @request Variable stellt eine Webmachine::Request mit einem Webmachine::Adapters::Rack::RequestBody und einem Rack::Request, aber ich kann die Datei aus, es zu benutzen es als Input für meine RestClient Anfrage nicht erhalten.

Ich denke; @request.body.to_s und @request.body.to_io, stellen die hochgeladene Datei in irgendeiner Weise dar, und ich habe versucht, sie als Eingabe für Rack::Multipart Methoden zu verwenden, aber das gibt mir die Datei nicht.

Ich habe auch versucht, mit dem Rack-Raw-Upload-Juwel zu arbeiten, aber ich kann nicht den Mime-Typ etwas anderes als "application/x-www-form-urlencoded" oder multipart. Ich setze es explizit auf; application/octet-stream

Dinge wie File.new(filename, 'rb') gab mir `rrno :: ENOENT: Keine solche Datei oder Verzeichnis @ rb_sysopen '. Als Dateiname habe ich nur 'example.zip' benutzt.

Ich vermisse etwas, was mit der Rack :: Request Call (env) -Methode zu tun hat.

Hat jemand eine Idee, wie man mit den Rack-Uploads umgeht? Oder geben Sie mir Hinweise für eine neue Richtung? Vielen Dank.

+0

Es könnte sich lohnen, Ihren Rack-Code zu veröffentlichen. – tadman

+0

@tadman Nun, ich habe keine echte Rack-Code. Ich weiß nur, dass Rack die Dateiuploads übernimmt. Und der Rack-Code, den ich ausprobiert habe, ist oben; die 'Rack :: Multipart' Methoden, wie' parse_multipart'. Sollte ich einen anderen Rack-Code implementiert haben? – LiveNL

Antwort

1

Ich habe eine Beschreibung erstellt, die zeigt, wie der Multipart-Stream abgerufen wird. Sie müssen weiter analysieren, um die hochgeladene Datei zu erhalten.

https://gist.github.com/jewilmeer/eb40abd665b70f53e6eb60801de24342

+0

Danke. Der 'File.write' Teil hat mich in die richtige Richtung gedrängt. Und ich fand heraus, dass 'request.body.to_s' auch den Trick machen konnte, anstatt' request.body.to_io.read'. – LiveNL