2

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

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

参数是一个包含我的文件的ioStringIO,所以它来自内存而不是磁盘。

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

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

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

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

4

2 回答 2

7

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

class MailIO < StringIO
  def path
    'message'
  end
end

我刚刚检查了这个,Mailgun api 对此非常失望。

于 2012-02-22T22:25:27.333 回答
1

在咨询了 rest-client 库(Archiloque)的作者后,似乎如果可以的话,API 并没有设置为轻松处理它。使用 :multipart => true 参数将导致 IO 被视为文件,它会在 IO 上查找非 nil #path,对于 StringIO 而言,该路径始终为 nil。

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

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

于 2011-11-08T07:10:23.033 回答