2017-03-05 75 views
0

文件上傳(沒有形式)我有這個西納特拉:: Base的代碼:接受在西納特拉

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

我使用郵差及其接口上傳文件。所以我發送POST請求form-data,其中在請求的主體名稱是hello和值是一個文件test.txt其中只包含一個簡單的字符串hey there

當我做params.inspect我得到這個長字符串

{ 「------ WebKitFormBoundaryocOEEr26iZGSe75n \ r \ nContent處置:表格數據;名稱」=> 「\」 你好\「文件名= \「test.txt \」\ r \ nContent-Type:text/plain \ r \ n \ r \ nhey there \ r \ n ------ WebKitFormBoundaryocOEEr26iZGSe75n - \ r \ n「}

所以基本上只有一個關鍵和一個單一的值。閱讀大多數Sinatra教程(從表單接受文件的地方),Sinatra使用params[:file]處理這個問題的方法很好,但是當文件直接來自HTTP請求的主體時,似乎並不是這種情況。

我試過一個非模塊化的方法,你也想Sinatra::Base,認爲它是解析中間件丟失的一些東西,但得到了同樣的結果。

有什麼我在這裏失蹤?我必須去製作自己的自定義分析器來獲取這個長散列的內容嗎?還是有更簡單的方法?

回答

2

我想這是郵差問題。當我在郵遞員中從'x-www-form-urlencoded'切換到'form-data'時,在標題部分,字段:Content-Type => application/x-www-form-urlencoded不會被刪除。所以對於遇到此問題的人,請確保手動刪除它。