七牛云图片上传 Node.js SDK
我太难了,一个前端去搞服务器端的代码,像我这样的开发速度会被开除的。因为自己一个人写,大概梳理下过程就是前端传一张图给后端,后端先保存在项目本地,再从项目本地传给七牛云。
七牛云 Node.js SDK 官方说明:https://developer.qiniu.com/kodo/sdk/1289/nodejs
官方说明就是demo写的太多太分散,让人根本不知道选哪个,还有少写了一行代码,我也是参考了很多其他人的代码才拼凑了一份完整的。
我的项目技术框架:
前端:https://github.com/TaleLin/lin-cms-vue
后端:https://github.com/TaleLin/lin-cms-koa
上传的关键代码 file.js
'use strict';
const {LinRouter,ParametersException} = require('lin-mizar');
const {LocalUploader} = require('../../extensions/file/local-uploader');
const path = require('path');
const qiniu = require("qiniu");
const file = new LinRouter({prefix: '/cms/file'});
file.post('/', async ctx => {
const files = await ctx.multipart();
if (files.length < 1) {
throw new ParametersException({
msg: '未找到符合条件的文件资源'
});
}
const uploader = new LocalUploader();
const arr = await uploader.upload(files);
console.log(arr);
ctx.json(arr);
const accessKey = '这里填入ak';
const secretKey = '这里填入sk';
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const bucket = 'room930'; //要上传的空间
var options = {scope: bucket};
var putPolicy = new qiniu.rs.PutPolicy(options);
var uploadToken = putPolicy.uploadToken(mac);
var key = files[0].filename;
var localFile = path.resolve(__dirname,'../../assets/',arr[0].path);
console.log("=========localFile========");
console.log(localFile);
console.log("=========localFile========");
var putExtra = new qiniu.form_up.PutExtra();
const config = new qiniu.conf.Config()
var formUploader = new qiniu.form_up.FormUploader(config);
// 文件上传
formUploader.putFile(uploadToken, key, localFile, putExtra, function (err, ret) {
if (!err) {
// 上传成功, 处理返回值
console.log(ret.hash, ret.key, ret.persistentId);
} else {
// 上传失败, 处理返回代码
console.log(err);
}
});
});
module.exports = {
file
};
备注:
上传的本地图片地址像这样的不行 http://localhost:5000/assets/2019/11/27/26ed361d-b0e5-4058-a309-97c7334a6b47.jpg
需要是这样的 /Users/mumu/starter/app/assets/2019/11/27/26ed361d-b0e5-4058-a309-97c7334a6b47.jpg