Nodejs 文件上传七牛(qiniu)
"dependencies": {
"express": "^4.18.2",
"morgan": "^1.10.0",
"multer": "^1.4.2",
"qiniu": "^7.8.0",
}
$ node -v
v18.14.2
const express = require('express');
const qiniu = require('qiniu');
const multer = require('multer');
const morgan = require('morgan');
const app = express();
// 使用 "dev" 格式的日志记录
app.use(morgan('dev'));
// 配置七牛云账号信息
const accessKey = process.env.AK;
const secretKey = process.env.SK;
const bucket = 'dywlkj-backup';
// 配置qiniu-sdk
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const config = new qiniu.conf.Config();
// config.zone = qiniu.zone.Zone_na0;//北美
config.zone = qiniu.zone.Zone_z2;//华北
const formUploader = new qiniu.form_up.FormUploader(config);
const putExtra = new qiniu.form_up.PutExtra();
// 配置Multer
const storage = multer.memoryStorage();
const upload = multer({storage: storage});
// 处理文件上传请求
app.post('/upload', upload.single('file'), async (req, res) => {
try {
const file = req.file;
const key = file.originalname;
// 生成上传凭证
const options = {
scope: bucket + ":" + key
};
const putPolicy = new qiniu.rs.PutPolicy(options);
const uploadToken = putPolicy.uploadToken(mac);
const cb = function (respErr, respBody, respInfo) {
if (respErr) {
console.error(respErr);
res.status(500).json({error: respErr.message});
} else if (respInfo.statusCode === 200) {
console.log('File.js uploaded successfully:', respBody.key);
res.json({ url: respBody.key });
} else {
console.error(`Failed to upload file. Status code: ${respInfo.statusCode}`);
res.status(500).json({error: `Failed to upload file. Status code: ${respInfo.statusCode}`});
}
}
// 上传文件到七牛云
formUploader.put(uploadToken, key, file.buffer, putExtra, cb);
} catch (err) {
console.error(err);
// 返回错误信息
res.status(500).json({error: err.message});
}
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});