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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Airborne的多部分POST,没有“缺少开始边界”相关的知识,希望对你有一定的参考价值。

现在已经使用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进行这些测试),但是希望让其他团队保持简单。

答案

机载框架基于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?

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

希望这会帮助你。

另一答案

您可以使用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

以上是关于Airborne的多部分POST,没有“缺少开始边界”的主要内容,如果未能解决你的问题,请参考以下文章

具有特定 JSON 要求的多部分表单数据 POST

错误的多部分 - 服务器上的 POST(json + 图像)

AFHttpSessionManager - 导致 org.codehaus.jackson.JsonParseException 的多部分 POST

警告:第 0 行未知中的多部分/表单数据 POST 数据中缺少边界

XMLHttpRequest:以 XML 和图像作为有效负载的多部分/相关 POST

php部分---对数据的多条件查询,批量删除