0
def test_post_with_file filename = 'test01.xml'
    File.open(filename) do |file|
        response = @http_client.post(url, {'documents'=>file})
    end
end

如何修改上述方法以处理多文件数组发布/上传?

file_array = ['test01.xml', 'test02.xml']
4

2 回答 2

0

我遇到了同样的问题,终于想出了如何做到这一点:

def test_post_with_file(file_array)
  form = file_array.map { |n| ['documents[]', File.open(n)] }
  response = @http_client.post(@url, form)
end

您可以在文档中看到如何传递多个值:http://rubydoc.info/gems/httpclient/HTTPClient#post_content-instance_method

在“正文”行中,我尝试使用第四个示例但没有成功。不知何故,HttpClient 只是决定应用于.to_s数组中的每个散列。

然后我尝试了第二种解决方案,它也不起作用,因为服务器只保留最后一个值。但是经过一番修改后,我发现如果参数名称包含方括号以指示数组中有多个值,则第二种解决方案有效。

也许这是 Sinatra 中的一个错误(这就是我正在使用的),也许此类数据的处理取决于实现,也许 HttpClient 文档已过时/错误。或这些的组合。

于 2013-12-10T08:54:33.313 回答
0

你的意思是这样吗?

def test_post_with_file(file_array=[])
  file_array.each do |filename|
    File.open(filename) do |file|
      response = @http_client.post(url, {'documents'=>file})
    end
  end
end
于 2013-08-09T20:47:44.880 回答