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?