ruby-on-rails - 如何使用 Faraday 和 Rails 5 发送表单数据?
问题描述
我有以下 Curl 使用Facebook Messenger API发送附件:
curl \
-F 'recipient={"id":"1234567890"}' \
-F 'message={"attachment":{"type":"image", "payload":{}}}' \
-F 'filedata=@/tmp/RackMultipart20191218-21313-lnjlid.png;type=image/png' \
"https://graph.facebook.com/v5.0/me/messages?access_token=abcd"
这是我发送表单数据的代码:
def send_attachment(to, file_data)
url = send_message_url
# conn = Connection.prepare_connection(url)
conn = Faraday.new(url) do |f|
f.request :multipart
f.request :url_encoded
f.adapter :net_http
f.response :logger, Logger.new(STDOUT), bodies: true
end
response = Connection.post_form_request(conn, prepare_attachment(to, file_data))
JSON.parse(response.body)
end
def prepare_attachment(to, file_data)
{
"recipient": JSON.dump(id: to),
"message": JSON.dump(attachment: {
"type": "image",
"payload": {}
}),
"filedata": file_data
}
# file_data example: "@/tmp/RackMultipart20191218-2416-1ictdah.jpg;type=image/jpeg"
end
Connection.post_form_request:
def self.post_form_request(connection, body)
connection.post do |req|
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
req.body = body
end
end
但现在我遇到了一个错误,它说Incorrect number of files uploaded. Must upload exactly one file.
解决方案
我删除了标题:req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
并使用"filedata": Faraday::UploadIO.new(file_path, content_type)
而不是字符串
推荐阅读
- vb.net - 如何从IP获取域名?
- android - Socket.IO-client Java with Header
- python - 将 pip 安装的库链接到 python
- c# - 全局捕获程序异常错误并写入asp.net core 2.1 web api中的文件
- r - xaringan 幻灯片分离器不分离幻灯片
- debugging - 在 WinDbg 的一行上设置读取观察点
- spring-kafka - 在 1.3.5 中停止 ConcurrentMessageListenerContainer
- c - 如何以完美的答案同时使用 openmp 和 AVX2?
- plsql - 需要关于 PL/SQL 数据库触发器的帮助
- c# - C# 完成消息后读取串行端口数据