前言
今天接到一个小任务,使用 httpc 请求的时候,要求传输一个文件而不是简单的 json 数据。翻烂了 erlang httpc 的文档,用 file 做关键字查询,始终没有找到如何才能传输一个文件。今天偶尔打开 fiddler 工具的时候,发现工具的body 部分有一个 upload file ... 的选项,使用这个选项选定一个文件后, body 部分显示的是一串有意义的字符。稍作对比后,我尝试着写下了方法,但对于可不可用,还需要测试,后续可能会修改。
示例
header部分:
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
body部分:
---------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="file.zip"
Content-Type: application/zip
( 此处是文件信息,用 file:read_file() 即可读取)
---------------------------acebdf13572468--
分析
header部分的boundary的后面的数据对应着body部分的开始和结束。此外,那个13位的字符应该是随机生成的用来做分割线的。fiddler 上使用的始终是一个数据,但我在网上找到的例子是用了不同的数据,就原理来说,只要和文件内容不冲突的13位随机数字字母混合字符串都可以。也就是说,httpc请求的时候,头部和body部分按照上述格式组装一下就可以了。
网友评论