前言
我以前的文章有提到过 http 请求是如何去传输文件的。目前的需求是传输一个 png 图片文件, png文件一般是比较小的如果再用原来的方法,未免有牛刀杀鸡之感。
实现
有一个比较常见的实现是:将文件转化为 binary, 那之后,进行一次 base64 编码。
错误情况
在这个过程中,我也尝试过直接传输 binary 一类的方法,但是 http 请求之后,收到的结果无一例外和原先是不符合了的。推测是传输过程中进行了一定的编码操作。
代码
{ok, Bin} = file:read_file(FileRoot),
FileBin = base64:encode(Bin)
将上面的 FileBin 作为 json 的 value 之一即可。erlang 的实现有一个优秀之处在于,读取 binary 的时候,会忽略文件的名字。其他语言的实现中 binary 前几位会存储文件名,会导致无法直接将结果转回为文件格式
网友评论