node+axios实现服务端文件上传


字数:552 阅读时长:2分钟 阅读:85

最近调研企业wx集成H5应用,其中有一个发送图文消息,需要上传图片到临时素材库。之前做过文件上传到阿里云、七牛云都是服务端提供封装好的文件上传接口,在客户端使用ajax的方式上传。所以就来踩踩坑,使用node+axios实现服务端文件上传。

Node+Axios Upload

一、接口文档介绍

请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
  • 使用multipart/form-data POST上传文件, 文件标识名为”media”。
  • POST的请求包中,form-data中媒体文件标识,应包含有 filename、filelength、content-type等信息。
  • 参数说明:
参数必须说明
access_token调用接口凭证
type媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)

二、文件上传

2-1.初始化项目

1
2
3
4
5
6
7
8
9
10
11
# 创建目录
mkdir upload-demo

# 进入upload-demo目录
cd upload-demo

# npm 初始化
npm init -y

# 创建app.js
touch app.js

2-2.安装插件依赖

  • axios:是一个基于 promiseHTTP 库,可以用在客户端浏览器和服务端node.js 中。
  • form-data:是创建可读multipart/form-data流的库。可用于向其他 Web 应用程序提交表单和文件上传。
1
npm i -S axios form-data

2-3.上传核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// app.js
const fs = require('fs')
const FormData = require('form-data')
const axios = require('axios')

;(()=>{
let formData = new FormData();
let imgFiles = fs.createReadStream('./test.jpg') // 根目录下需要有一个test.jpg文件
formData.append('media', imgFiles);
axios({
url: 'https://qyapi.weixin.qq.com/cgi-bin/media/upload',
method: 'POST',
params: {
access_token: 'ACCESS_TOKEN', // ACCESS_TOKEN 需要替换为真实 token
type: 'image', // 这里以上图片为例
},
data: formData,
headers: {
'Content-Type': 'multipart/form-data', // 必须要设置
},
}).then(res=>{
console.log(res.data)
})
})();

2-4.执行脚本

1
node app.js

不出意外会输入以下内容:

1
2
3
4
5
6
7
{
"errcode": 0,
"errmsg": ""
"type": "image",
"media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0",
"created_at": "1380000000"
}

其中media_id就是上传到素材库的媒体文件唯一标识,发送图文消息时需要用到。


《node+axios服务端文件上传下载》系列


欢迎访问:天問博客

本文作者: Tiven
发布时间: 2021-11-06
最后更新: 2022-04-14
本文标题: node+axios实现服务端文件上传
本文链接: https://www.tiven.cn/p/c25ecc37/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^