multipart POST 使用 Airborne,失败 "Missing start boundary"
multipart POST with Airborne, failing with "Missing start boundary"
已经使用 rest-client 一段时间了,但对 Airborne 还是个新手。我遇到的问题是我似乎无法使用 Airborne 获得 multi-part post 文件上传。我以一个糟糕的请求结束 'Missing start boundary' 我的机载 POST 看起来像这样:
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-client 的工作示例如下所示:
fyle = File.new("e:/some-file.jpg, 'rb')
resp = RestClient.post base_path_api << "uploads",
{:profile => "KonflictME", :file => fyle, :multipart => true},
{:authorization => "myTokenString}
两者之间没有太大区别,应该不会,因为 rest-client 是在机载引擎盖下使用的。 对于 Airborne,base_url 和 headers 在配置中设置 (spec_helper.rb)。
还有其他人尝试过 multi-part post 空降兵吗?上传只是我测试套件的一小部分,我有一个 non-Airborne 解决方案(直接使用 rest-client 进行这些测试),但希望让团队的其他成员保持简单。
airborne framework是基于restclient的,在源码中有一行lib/airborne/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中,无论是post一个json还是上传一个文件,都不需要考虑body的样式。如果要上传文件可以将上面的代码改成:
request_body = request_body.to_json if options[:body].is_a?(Hash) && options[:body].to_json["file"].nil?
检查您定义的正文是否包含文件。我在最近的项目中进行了此更改。
希望对您有所帮助。
您可以使用 RestClient(airborne 的依赖项)使这变得相当容易。用散列写出你的参数:
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.headers
已经使用 rest-client 一段时间了,但对 Airborne 还是个新手。我遇到的问题是我似乎无法使用 Airborne 获得 multi-part post 文件上传。我以一个糟糕的请求结束 'Missing start boundary' 我的机载 POST 看起来像这样:
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-client 的工作示例如下所示:
fyle = File.new("e:/some-file.jpg, 'rb')
resp = RestClient.post base_path_api << "uploads",
{:profile => "KonflictME", :file => fyle, :multipart => true},
{:authorization => "myTokenString}
两者之间没有太大区别,应该不会,因为 rest-client 是在机载引擎盖下使用的。 对于 Airborne,base_url 和 headers 在配置中设置 (spec_helper.rb)。
还有其他人尝试过 multi-part post 空降兵吗?上传只是我测试套件的一小部分,我有一个 non-Airborne 解决方案(直接使用 rest-client 进行这些测试),但希望让团队的其他成员保持简单。
airborne framework是基于restclient的,在源码中有一行lib/airborne/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中,无论是post一个json还是上传一个文件,都不需要考虑body的样式。如果要上传文件可以将上面的代码改成:
request_body = request_body.to_json if options[:body].is_a?(Hash) && options[:body].to_json["file"].nil?
检查您定义的正文是否包含文件。我在最近的项目中进行了此更改。
希望对您有所帮助。
您可以使用 RestClient(airborne 的依赖项)使这变得相当容易。用散列写出你的参数:
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.headers