简单点,代码明确直接上
配置代码
config.js
const qiniu = require('qiniu')
// 创建上传凭证
const accessKey = 'xxxx' //七牛的accessKey
const secretKey = 'xxxx' //七牛的secretKey
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const options = {
scope: 'sutengjie',
returnBody: `{"key":"$(key)","size":$(fsize),"name":"$(fname)","type":"$(mimeType)"}`
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
const keyInQiniuCloud = 'image/' //七牛云文件目录
//服务器直传
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z2;//区域
// 是否使用https域名
//config.useHttpsDomain = true;
// 上传是否使用cdn加速
//config.useCdnDomain = true;
//图片的地址
var bucketManager = new qiniu.rs.BucketManager(mac, config);
var privateBucketDomain = 'xxxxx.com/'; //七牛中自己配置的域名地址
var deadline = parseInt(Date.now() / 1000) + 3600000; // 永不过期
const getFileUrl=(key)=> {
// return bucketManager.privateDownloadUrl(privateBucketDomain, key); //公开空间
return bucketManager.privateDownloadUrl(privateBucketDomain, key, deadline); //私有空间
}
module.exports = {
uploadToken,
config,
getFileUrl,
keyInQiniuCloud,
privateBucketDomain,
jwtSecretKey: 'sutengjie'
}
直接上代码
var express = require('express');
var router = express.Router();
const fs = require('fs')
const multer = require("multer");
// 引入七牛模块
const qiniu = require('qiniu')
const qnconfig = require('../config')
var upload = multer({ dest: "uploads/" }); //本地服务文件夹
//单文件
router.post("/upload", upload.single("file"), (req, res, next) => {
var fileObj = req.file;
uploadFile(fileObj,(respBody)=>{
if (respBody.url){
res.status(200).json({
code: "200",
data: respBody,
// data: qnconfig.getFileUrl(respBody.key),
msg: "上传成功",
});
}else{
res.status(respInfo.statusCode).json({ code: "400", msg: "上传失败" });
}
})
});
//多文件
router.post("/files", upload.array("file"), (req, res, next) => {
var fileObj = req.files;
var actions = [];
for (var i =0;i<fileObj.length; i++){
var action = () =>{
return new Promise(resolve => {
uploadFile(fileObj[i], function(respBody) {
resolve(respBody);
});
})
}
actions.push(action()); // 将每次循环调用的方法添加到方法数组中
}
Promise.all(actions).then((resolve)=>{
res.status(200).json({
code: "200",
data: resolve,
msg: "上传成功",
});
})
});
// 上传函数
function uploadFile(fileObj, callback) {
var formUploader = new qiniu.form_up.FormUploader(qnconfig.config);
var putExtra = new qiniu.form_up.PutExtra();
// 七牛云上的保存位置、本地服务文件的路径
formUploader.putFile(qnconfig.uploadToken,qnconfig.keyInQiniuCloud + fileObj.originalname,fileObj.path,putExtra,function (respErr, respBody, respInfo) {
if (respErr) throw respErr;
respBody.url = qnconfig.privateBucketDomain + qnconfig.keyInQiniuCloud + fileObj.originalname
respBody.name = fileObj.originalname
fs.unlinkSync(fileObj.path) //删除服务本地文件
if (respInfo.statusCode == 200) {
callback(respBody)
} else {
callback({ code: "400", msg: "上传失败" })
}
}
);
}
module.exports = router;
七牛云有什么不懂,建议直接看文档 Node.js SDK V6_SDK 下载_对象存储 - 七牛开发者中心