express官方给出了两个处理数据的中间件:body-parser和multer
具体可查看:https://www.expressjs.com.cn/resources/middleware.html
还有一个是 express-formidable,但是他好像和body-parser会起冲突,所以我放弃了,
我使用的是七牛的服务器直传,可参考:https://developer.qiniu.com/kodo/sdk/1289/nodejs
直接放代码:
const qiniu = require("qiniu");
const multer = require("multer");
var upload = multer({ dest: "uploads/" });
/**
* 单上传文件
* @route POST /api/upload/upload
* @summary 单上传文件
* @group uploadFile - 用户模块
* @param {file} file.formData
* @returns {object} msg
* @security JWT
*/
router.post("/upload", upload.single("file"), (req, res, next) => {
console.log(req.file);
const fileObj = req.file;
var formUploader = new qiniu.form_up.FormUploader(qnconfig.config);
var putExtra = new qiniu.form_up.PutExtra();
formUploader.putFile(
qnconfig.uploadToken,
fileObj.originalname,
fileObj.path,
putExtra,
function (respErr, respBody, respInfo) {
if (respErr) {
throw respErr;
}
if (respInfo.statusCode == 200) {
res
.status(200)
.json({
code: "200",
data: qnconfig.getFileUrl(respBody.key),
msg: "图片上传成功",
});
} else {
res
.status(respInfo.statusCode)
.json({ code: "200", data: respBody, msg: "上传失败" });
}
}
);
});
下面是七牛的配置文件:
const qiniu = require('qiniu')
// 创建上传凭证
const accessKey = 'wwwwwwwww' //七牛的accessKey
const secretKey = 'eeeeeeeeeeee' //七牛的secretKey
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const options = {
scope: 'name', //对象存储空间名字
expires: 7200
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
//服务器直传
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z0;
//图片的地址
var bucketManager = new qiniu.rs.BucketManager(mac, config);
var privateBucketDomain = 'http://www.baidu.com'; //七牛中自己配置的域名地址
var deadline = parseInt(Date.now() / 1000) + 3600000; // 永不过期
const getFileUrl=(key)=>{
return bucketManager.privateDownloadUrl(privateBucketDomain, key, deadline);
}
module.exports = {
uploadToken,
config,
getFileUrl
}