来自IO的RestClient分段上传

时间:2011-11-02 17:44:45

标签: ruby http file-upload multipart rest-client

我正在尝试使用RestClient将数据上传为多部分,如下所示:

response = RestClient.post(url, io, {
        :cookies => {
          'JSESSIONID' => @sessionid
        }, 
        :multipart => true, 
        :content_type => 'multipart/form-data'
      })

io参数是一个包含我文件的StringIO,因此它来自内存而不是来自磁盘。

服务器(Tomcat servlet)无法读取多部分数据,发出错误:

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

所以我相信RestClient不会以多部分格式发送它?有谁看到了问题?我假设问题出在Ruby(客户端)端,但如果有人认为它可能是服务器端问题,我可以发布我的servlet(Spring)代码。

我也想知道RestClient会用于上传的文件名,因为没有实际的文件......你有没有文件名的多部分请求吗?

2 个答案:

答案 0 :(得分:7)

你可以这样做,它只需要子类StringIO并为它添加一个非零路径方法:

class MailIO < StringIO
  def path
    'message'
  end
end

我刚检查过这个,而且Mailgun api对此非常不满。

答案 1 :(得分:1)

在咨询了rest-client库(Archiloque)的作者之后,似乎如果可能的话,API就不会设置为轻松处理它。使用:multipart =&gt; true参数将导致IO被视为文件,并且它在IO上查找非零#path,对于StringIO总是为零。

如果将来有人需要这个,你需要咨询图书馆的邮件列表(code@archiloque.net),因为作者似乎认为这是可能的,但可能并不简单。

只要不是多部分格式,它就可以轻松地从IO进行流式上传,这是我最终解决的问题。

相关问题