接受Sinatra中的文件上传(没有表格)

时间:2017-03-05 17:35:43

标签: ruby sinatra postman

我有这个Sinatra :: Base代码:

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

我正在使用Postman及其界面上传文件。所以我发送一个POST请求form-data,请求正文中的名称为hello,值为文件test.txt,其中只包含一个简单的字符串hey there

当我params.inspect时,我得到这个长字符串

{“------ WebKitFormBoundaryocOEEr26iZGSe75n \ r \ nConContent-Disposition:form-data; name”=&gt;“\”hello \“; filename = \”test.txt \“\ r \ nConContent-Type :text / plain \ r \ n \ r \ nhey那里\ r \ n ------ WebKitFormBoundaryocOEEr26iZGSe75n - \ r \ n“}

所以基本上只需要一个单键和一个单值。阅读大多数Sinatra教程(从表单中接受文件),Sinatra使用params[:file]处理这个问题的方法很好,但是当文件直接来自一个文件时,情况似乎并非如此。 HTTP请求。

我尝试了一种非模块化的方法,而不是Sinatra::Base,认为这是一些解析中间件缺失,但得到的结果相同。

这里有什么我想念的吗?我必须去制作我自己的自定义解析器来获取这个长哈希的内容吗?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

我认为这是邮差问题。当我在Postman中从'x-www-form-urlencoded'切换到'form-data'时,在Header部分中,字段:Content-Type => application/x-www-form-urlencoded未被删除。因此,对于遇到此问题的人,请确保手动将其删除。