我正在尝试使用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会用于上传的文件名,因为没有实际的文件......你有没有文件名的多部分请求吗?
答案 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进行流式上传,这是我最终解决的问题。