【发布时间】:2020-03-21 03:08:45
【问题描述】:
我正在使用 Faraday Gem 在 Ruby 中进行 API 自动化,以便在我的 API 中自动上传文件。
我有以下问题:我需要将文件作为表单数据上传,但它不起作用。
这是我正在使用的最新语法:
conn = Faraday.new($api['upload']) do |f|
f.request :multipart
f.adapter Faraday.default_adapter
end
formdata = { :file => Faraday::UploadIO.new('./arquivo/pequeno.pdf', 'file/pdf') }
headers = {'Content-Type' => 'multipart/form-data', 'Authorization' => 'Bearer ' + @token, 'uuidUser' => @uuid}
conn.post('/upload', formdata, headers)
另外,我无法获取响应正文或代码。我得到了方法体或代码或状态不存在的错误。
你知道我做错了什么吗?
我把记录器放在进一步查看发生了什么,结果如下:
W, [2019-11-27T11:15:15.385754 #4208] WARN -- : HTTP 500
D, [2019-11-27T11:15:15.386412 #4208] DEBUG -- : "x-content-type-options: nosniff\nx-xss-protection: 1; mode=block\ncache-control: no-cache, no-store, max-age=0, must-revalidate\npragma: no-cache\nexpires: 0\nx-frame-options: DENY\ncontent-type: application/json;charset=UTF-8\ntransfer-encoding: chunked\ndate: Wed, 27 Nov 2019 14:15:14 GMT\nconnection: close\n\n{\"exception\":\"org.springframework.web.multipart.MultipartException\",\"status\":500,\"error\":[\"Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found\"]}"
【问题讨论】:
-
您是否首先验证您的授权有效? IE。您可以使用 Faraday 和您提供的身份验证标头访问其他页面吗?
-
是的,授权有效。但是 post 方法不起作用。发不出去。我的请求甚至没有在服务器中生成日志。我尝试打印发送的 URL,它显示:#<:connection:0x000000000aac8820>
-
我刚刚在我的服务器上测试了你的代码,它发布得很好。您是否检查过
$api['upload']的内容以确认它确实包含某些内容。 IE。正确的 URL 作为文本。 -
是的,我将变量替换为真实 URL。正如我在上一条评论中所说,当我打印“conn”时,我在控制台上得到了这个:#<:connection:0x000000000....>
-
我解决了这个问题。
标签: ruby automation header rubygems faraday