发现Faraday不支持混合多部分请求(使用json/xml数据上传文件)。这是因为混合文件和json数据不是restful方法,应该完全避免。这里正在进行更多的讨论
https://github.com/lostisland/faraday/issues/769
我已通过修补暂时修复了此问题
Faraday::Mulitipart
类以允许混合JSON数据,
class Faraday::Request::Multipart
def create_multipart(env, params)
boundary = env.request.boundary
parts = process_params(params) do |key, value|
if (JSON.parse(value) rescue false)
Faraday::Parts::Part.new(boundary, key, value, 'Content-Type' => 'application/json')
else
Faraday::Parts::Part.new(boundary, key, value)
end
end
parts << Faraday::Parts::EpiloguePart.new(boundary)
body = Faraday::CompositeReadIO.new(parts)
env.request_headers[Faraday::Env::ContentLength] = body.length.to_s
return body
end
end
但从长远来看,应该更改服务器实现,以避免混合多部分请求。