使用rest客户端已经有一段时间了,但对Airborne来说是新的。我遇到的问题是,我似乎无法得到与Airborne一起工作的文件上传的多部分帖子。最后,我收到了一个错误的请求:“缺失开始边界”--我的空载邮件看起来如下:
before :all do
fyle = File.new("e:/some-file.jpg", 'rb')
body = {:profile => "KonflictME", :file => fyle, :multipart => true}
post "/uploads", body, { :content_type => 'multipart/form-data' }
end我使用rest客户机的工作示例如下所示:
fyle = File.new("e:/some-file.jpg, 'rb')
resp = RestClient.post base_path_api << "uploads",
{:profile => "KonflictME", :file => fyle, :multipart => true},
{:authorization => "myTokenString}两者之间没有太大的区别,不应该是因为休息-客户是在引擎盖下的空载。对于机载设备,配置(spec_helper.rb)中设置了base_url和标头。
有没有其他人试过用空降兵做多部分投递?上传只是我测试套件的一小部分,我有一个非机载的解决方案(只需直接使用rest客户机进行这些测试),但希望对团队的其他成员保持简单。
发布于 2016-09-20 01:56:30
机载框架基于restclient,在源代码中lib/机载/rest_client_requester.rb中有一行:
request_body = request_body.to_json if options[:body].is_a?(Hash)
这意味着您定义的每个主体都将被转换为json,并作为如下参数:
RestClient.send(method, get_url(url), request_body, headers)
但是在restclient中,您不需要考虑body的模式,无论您是想发布json还是上传一个文件。如果要上载文件,可以将上述代码更改为:
request_body = request_body.to_json if options[:body].is_a?(Hash) && options[:body].to_json["file"].nil?
若要检查您定义的主体是否包含文件,请执行以下操作。我在最近的项目中做了这个改变。
希望这能帮到你。
发布于 2017-12-19 21:22:25
您可以使用RestClient (机载的依赖项)使这相当容易。用散列写出平常值:
params = {
other_param: 'Some param',
file: File.new(Rails.root.join('spec', 'fixtures', 'sample.csv'), 'r')
}
}
multipart = RestClient::Payload::Multipart.new(params)
post endpoint, params: multipart.read, headers: multipart.headershttps://stackoverflow.com/questions/39453127
复制相似问题