如何使用HttpClient一次发布/上传多个文件?

时间:2013-08-09 20:26:46

标签: ruby httpclient

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']

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

在“body”行中,我尝试使用第4个示例但没有成功。不知怎的,HttpClient决定将.to_s应用于数组中的每个哈希。

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

也许这是Sinatra中的一个错误(这就是我正在使用的),也许这些数据的处理依赖于实现,也许HttpClient doc已经过时/错误。或者这些的组合。