语言: nodejs

今天主要是记录一下微信小游戏联系客服的时候,服务器给微信用户发送图片的流程。
如果你遇到以下困难,可以看这篇文章,因为它涉及这些用法吧。

  1. 服务器作为客户端发送 form 表单数据
  2. 使用nodejs上传媒体文件给微信服务器
  3. 使用服务器拉去其他服务器或cdn等存放图的地方,将其存储为buffer

这里主要使用第三方包 request
以前都是使用 nodejs 原生的http请求 功能有限。

我这边的需求是在小游戏联系客服的时候,服务器发送一张图片给用户。

拉取网上图片以buffer类型存储在内存中

使用requset 拉去网上图片并保存为buffer这种数据类型,如果你不知道Buufer 是什么东西,可以上网上搜,一大堆。
这里直接展示代码,逻辑都比较的简单。还是第三方库封装的功能服务吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var request = require('request');

let url = "https://test.com/";
let path = "test/test.jpg";
request({
url: url + path,
encoding: null
}, function(err, res, data) {
if(err) {
cb(err, null);
} else {
if(res.statusCode == 200) {
cb(null,data);

} else {
cb(new Error("err"),null)
}
}
})

这里唯一好说明的一点可能就是 在请求配置中的 encoding 设置为 null 因为默认他会返回字符串这并不是我们想要的。
这样他返回的数据就是 Buffer 类型的数据。

服务器模拟表单填写

这里官方文档在 表单 提交那一块写的例子也挺多,传递 字符串,Buffer,文件,自定义文件等。

代码展示传递自定义文件的表单数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var request = require('request');

let token = "22_Oa10EbGd2mqFc3vzzMtQMZFyfh-p999OLKjpi8qnHIPwWt3aAk3zwyjDi36ye5s-jAER28aOemlR15PT99zoM2qzNbu7xzbl1kjxepkC9RoYQRA9Jk6Z0Kxwef2eZ4iRt_ECtCfKXZGlyFDgDCAbAIALKI";
let type = "image";

let url = `https://api.weixin.qq.com/cgi-bin/media/upload?access_token=${token}&type=${type}`;

var form = { //构造表单
media: {
value: buffer, // 注意这有个未知变量, 这个就是上一步请求过来的 buffer 数据
options: {
filename: 'test.jpg',
contentType: 'image/jpeg'
}
},
}
request({
url: url,
method:'POST',
formData: form,
json:true
}, (err, res, data) => {
if(err) {
console.log("ERR =>", err)
} else {
if(res.statusCode == 200) {
console.log("SUCCESS", data);

} else {
cb("STATUS CODE", res);
}
}
})

这里的 buffer 变量就是上一步 请求 过来的数据。 就是将上一步请求到的 data 直接 传递给 这个请求中当作参数。
这个表单构建你直接将 request 文档上面自定义的写法直接粘过来就能用
唯一不一样的可能就是,它表单里的 value 是 流, 我的是 buffer, 但是也是能传递的,而且微信的例子中写的也是buffer。

好了这篇内容就到这里了。有问题可以将右边展开,加我QQ在讨论。

最后更新: 2019年08月14日 11:22

原始链接: https://leng521.top/posts/6512ee5/