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']
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']
我遇到了同样的问题,终于想出了如何做到这一点:
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 文档已过时/错误。或这些的组合。
你的意思是这样吗?
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