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']
答案 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已经过时/错误。或者这些的组合。