Airborne的多部分POST,没有“缺少开始边界”

问题描述 投票:1回答:2

现在已经使用rest-client一段时间了,但是空降新手。我遇到的障碍是,我似乎无法获得与Airborne合作的文件上传的多部分帖子。我结束了一个错误的请求'缺少开始边界'我的Airborne 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的引擎盖下。对于Airborne,base_url和header在config(spec_helper.rb)中设置。

有没有其他人尝试过Airborne的多部分帖子?上传只是我测试套件的一小部分,我有一个非机载解决方案(只是直接使用rest-client进行这些测试),但是希望让其他团队保持简单。

ruby rspec rest-client airborne
2个回答
0
投票

机载框架基于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中,无论是想发布json还是上传文件,都不需要考虑body的模式。如果要上传文件,可以将上述代码更改为:

request_body = request_body.to_json if options[:body].is_a?(Hash) && options[:body].to_json["file"].nil?

检查您定义的主体是否包含文件。我在最近的项目中做了这个改变。

希望这会帮助你。


0
投票

您可以使用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.headers
© www.soinside.com 2019 - 2024. All rights reserved.