2017-03-05 3 views
0

Ich habe dieses Sinatra :: Base Code:(formlos) in Sinatra

class Crush < Sinatra::Base 
    post '/upload' do 
    erb params.inspect 
    end 
end 

Ich verwende Postman und seine Schnittstelle für eine Datei hochladen. So sende ich eine POST-Anfrage mit form-data, wo im Körper der Anfrage der Name ist hello und der Wert ist eine Datei test.txt, die nur eine einfache Zeichenfolge hey there enthält.

Wenn ich params.inspect tun bekomme ich diese lange Reihe

{ "------ WebKitFormBoundaryocOEEr26iZGSe75n \ r \ nContent-Disposition: form-data; name" => "\" hallo \ "; filename = \ "test.txt \" \ r \ nContent-Type: text/plain \ r \ n \ r \ nhey gibt \ r \ n ------ WebKitFormBoundaryocOEEr26iZGSe75n - \ r \ n "}

So im Grunde eine lange hat mit einem einzigen Schlüssel und einem einzigen Wert. Wenn man die meisten Sinatra-Tutorials liest (wo die Datei von einem Formular akzeptiert wird), gibt es einen netten Weg, wie Sinatra dies unter Verwendung von params[:file] behandelt, aber dies scheint nicht der Fall zu sein, wenn die Datei direkt aus dem Körper einer HTTP-Anfrage kommt.

Ich versuchte einen nicht-modularen Ansatz auch ohne Sinatra::Base, denke, es ist einige Parsing Middleware fehlt, aber das gleiche Ergebnis.

Gibt es etwas, das mir hier fehlt? Muss ich meinen eigenen benutzerdefinierten Parser erstellen, um den Inhalt dieses langen Hash zu erhalten? Oder gibt es einen leichteren Weg?

Antwort

2

Ich dachte, es ist Postman Problem. Wenn ich in Postman von "x-www-form-urlencoded" auf "Formulardaten" umschalte, wird das Feld: Content-Type => application/x-www-form-urlencoded NICHT entfernt. Stellen Sie daher sicher, dass Sie das Problem manuell beheben, wenn Sie auf dieses Problem stoßen.