微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 使用法拉第上传文件

我在尝试使用Faraday将文件上传到Web服务时遇到问题.

我的代码

conn = Faraday.new('http://myapi') do |f|
  f.request :multipart
end

payload = { :file => Faraday::Uploadio.new('...','image/jpeg') }

conn.post('/',payload)

尝试发布后似乎没有任何事情发生.当我检查响应this是我所看到的:

#<Faraday::Response:0x007fd9e5903870 @env={:method=>:post,:body=>#<Faraday::CompositeReadio:0x007fd9e5903a50 @parts=[#<Parts::FilePart:0x007fd9e5903e38 @head="-------------RubyMultipartPost\r\nContent-disposition: form-data; name=\"file\"; filename=\"indymade-badge-horizontal.png\"\r\nContent-Length: 7821\r\nContent-Type: image/png\r\nContent-transfer-encoding: binary\r\n\r\n",@foot="\r\n",@length=8026,@io=#<CompositeReadio:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>,#<Uploadio:0x007fd9e514a3b8 @content_type="image/png",@original_filename="indymade-badge-horizontal.png",@local_path="/Users/anthonator/Downloads/indymade-badge-horizontal.png",@io=#<File:/Users/anthonator/Downloads/indymade-badge-horizontal.png>,@opts={}>,#<StringIO:0x007fd9e5903b90>],@index=0>>,#<Parts::EpiloguePart:0x007fd9e5903ac8 @part="-------------RubyMultipartPost--\r\n\r\n",@io=#<StringIO:0x007fd9e5903a78>>],@ios=[#<CompositeReadio:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>,@index=0>,#<StringIO:0x007fd9e5903a78>],:url=>#<URI::HTTPS:0x007fd9e5909d60 URL:https://myapi>,:request_headers=>{"User-Agent"=>"Faraday v0.8.7","Content-Type"=>"multipart/form-data;boundary=-----------RubyMultipartPost","Content-Length"=>"8062"},:parallel_manager=>nil,:request=>{:proxy=>nil,:boundary=>"-----------RubyMultipartPost"},:ssl=>{},:response=>#<Faraday::Response:0x007fd9e5903870 ...>},@on_complete_callbacks=[]>
irb(main):065:0> response.inspect
=> "#<Faraday::Response:0x007fd9e5903870 @env={:method=>:post,:body=>#<Faraday::CompositeReadio:0x007fd9e5903a50 @parts=[#<Parts::FilePart:0x007fd9e5903e38 @head=\"-------------RubyMultipartPost\\r\\nContent-disposition: form-data; name=\\\"file\\\"; filename=\\\"indymade-badge-horizontal.png\\\"\\r\\nContent-Length: 7821\\r\\nContent-Type: image/png\\r\\nContent-transfer-encoding: binary\\r\\n\\r\\n\",@foot=\"\\r\\n\",#<Uploadio:0x007fd9e514a3b8 @content_type=\"image/png\",@original_filename=\"indymade-badge-horizontal.png\",@local_path=\"/Users/anthonator/Downloads/indymade-badge-horizontal.png\",#<Parts::EpiloguePart:0x007fd9e5903ac8 @part=\"-------------RubyMultipartPost--\\r\\n\\r\\n\",:request_headers=>{\"User-Agent\"=>\"Faraday v0.8.7\",\"Content-Type\"=>\"multipart/form-data;boundary=-----------RubyMultipartPost\",\"Content-Length\"=>\"8062\"},:boundary=>\"-----------RubyMultipartPost\"},@on_complete_callbacks=[]>"

正在将正文设置为CompositeReadio对象,它似乎永远不会发送请求.

解决方法

事实证明,我需要指定一个适配器.这是最终工作的代码.
conn = Faraday.new('http://myapi') do |f|
  f.request :multipart
  f.request :url_encoded
  f.adapter :net_http # This is what ended up making it work
end

payload = { :file => Faraday::Uploadio.new('...',payload)

原文地址:https://www.jb51.cc/ruby/274289.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐