文件上传似乎不适用于`content-type:application / octet-stream`

时间:2017-08-16 21:27:46

标签: facebook facebook-graph-api facebook-messenger

在将文件上传到https://graph.facebook.com/v2.6/me/messages?access_token=xxxx时遇到问题   - API documentation

据我所知,文档提供的curl请求和我们的实现请求之间只有一个重要区别 - 我们使用“content-type”:“application / octet-stream”而不是解析我们发送的文件的确切mimetype。如果这可能是问题,我很想知道,因为我们从FB回来的所有内容都是通用的“抱歉,出了问题。” HTML回复。

有问题的请求:

通过cURL(成功):

POST / HTTP/1.1
Host: localhost:3000
User-Agent: curl/7.51.0
Accept: */*
Content-Length: 463
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------ce70fccbff4ca73d

--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="recipient"

{"id":"100016849000254"}
--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="message"

{"attachment":{"type":"file", "payload":{}}}
--------------------------ce70fccbff4ca73d
Content-Disposition: form-data; name="filedata"; filename="test.txt"
Content-Type: text/plain

test text file
--------------------------ce70fccbff4ca73d--

通过我们的实施(失败):

POST / HTTP/1.1
Transfer-Encoding: identity
Content-Type: multipart/form-data; boundary=---------------------------cbriejsxmxnhcdok
Content-Length: 642
Host: localhost:3000
User-Agent: hackney/1.8.6

-----------------------------cbriejsxmxnhcdok
content-length: 24
content-type: application/octet-stream
content-disposition: form-data; name="recipient"

{"id":"100016849000254"}
-----------------------------cbriejsxmxnhcdok
content-length: 43
content-type: application/octet-stream
content-disposition: form-data; name="message"

{"attachment":{"type":"file","payload":{}}}
-----------------------------cbriejsxmxnhcdok
content-length: 21
content-type: application/octet-stream
content-disposition: form-data; name="filedata"; filename="test.txt"

test text file
-----------------------------cbriejsxmxnhcdok--

我们已经尝试完全匹配所有标头,包括Accept: */*(完全没有区别)和Expect: 100-continue(导致无法打开写入流错误)。此外,我们在邮递员中尝试了相同的请求 - 它工作正常,看起来几乎与卷曲请求相同。

修改:只是尝试手动将filedata部分中的内容类型设置为text/plain,但同样失败。

编辑2:成功的原始卷曲请求:

curl  \
  -F message='{"attachment":{"type":"file", "payload":{}}}' \
  -F recipient='{"id":"<recipientId>"}' \
  -F filedata=@./test.txt \
  "https://graph.facebook.com/v2.6/me/messages?access_token=<token>"

我现在无法真正发布我们的实现代码,因为我的位置涉及底层架构上方的略微抽象的接口,而我现在没有时间找到有问题的特定行。另外,它是用erlang编写的,我并不完全理解。

0 个答案:

没有答案