最近做一个通过微信公众号聊天的项目,需要有文字、图片、语音。
通过聊天窗口发送给微信公众号的图片会回调到我们的服务器上,微信会给一个media_id,通过接口请求获取具体文件,使用nodejs request封装的request-promise进行文件下载。
使用接口调试工具发现返回的是一个文件类型的base64

接着使用request-promise请求下载图片,但是请求下来都是乱码,无论设置何种请求头都没有效果

经过查阅资料发现request是有默认的encoding,默认编码为uft8,而request请求下来的文件为buffer,所以编码格式不对自然就会乱码。
通过将request设置为options.encoding = null可以获得正确的buffer
封装get方法,传入参数encoding并设置:

请求结果为:

请求得到的结果为buffer,到这里其实就可以使用fs保存图片了,如果需要得到base64,可以使用buffer.toString(‘base64’)即可得到文件的base64
