第一次采用koa来编写接口,准确来说是第一次编写接口哈哈哈。万事开头难,又想最快的时间出结果,最终是网上找了一个简单的后台项目,然后就在这上面愉快的开始开发了。作为一名纯前端,一开始还是有些懵的,只能参照前辈的写法模仿者写些简单的接口(现在也还是哈哈哈)。
上传文件是后台项目最常见的接口之一了,网上一顿找发现大家一般都采用koa-body。 目前项目采用的是koa-bodypaser,妥妥的引发报错了。 koa-body和koa-bodypaser同时使用会出现冲突,一般koa-body用来替换koa-bodypaser 和koa-multer。 下面就是采用koa-multer来进行文件的上传了。
上传腾讯云配置
var COS = require('cos-nodejs-sdk-v5');
const cosUtil = {
cos: null,
Bucket: 'test-comm-1302801269', // 存储桶名称
Region: 'ap-shanghai', // 存储桶区域
Prefix: '/test-source', // 路径前缀
// 初始化配置
init(config) {
if(config){
this.Bucket = config.Bucket || this.Bucket;
this.Region = config.Region || this.Region;
this.Prefix = config.Prefix || this.Prefix;
}
// 下面两个密钥,需要在腾讯云获取(具体在用户-访问设置进行配置获取)
this.cos = new COS({
SecretId: 'xxxxxx', // 密钥id
SecretKey: 'xxxxxxxx' // 密钥key
});
},
putObject(param, callback) {
return new Promise((resolve, reject) => {
this.cos.putObject({
Bucket: this.Bucket, /* 必须 */
Region: this.Region, /* 必须 */
Key: param.key, /* 必须 */
Body: param.buffer, /* 必须 */
}, function (err, data) {
if (err) {
reject(err);
return;
}
resolve(data)
});
})
}
}
module.exports = cosUtil
上传接口
const multer = require("@koa/multer");
cosUtil
/**
* 文件上传
*/
//上传文件本地存放路径、及文件命名(由于实际项目直接上传到阿里云了,这里可以直接跳过)
const storage = multer.diskStorage({
// destination: function (req, file, cb) {
// cb(null, path.join(__dirname, "../../public"));
// },
// filename: function (req, file, cb) {
// let type = file.originalname.split(".")[1];
// cb(null, `${file.fieldname}-${Date.now().toString(16)}.${type}`);
// },
});
//文件上传限制
const limits = {
fields: 10, //非文件字段的数量
fileSize: 500 * 1024, //文件大小 单位 b
files: 1, //文件数量
};
const upload = multer({ storage, limits });
router.post("/upload/file", upload.single("file"), async (ctx, next) => {
let file = ctx.file;
let uppath = file.path;
// 创建可读流
let reader = fs.createReadStream(uppath);
console.log(file.originalname.split('.'),'originalname');
const extName = file.originalname.split(".")
let newFilename = new Date().getTime() + "." + extName[extName.length - 1];
cosUtil.init();
let cosResult = await cosUtil.putObject({
key: `test-source/upload/${newFilename}`, // oss存放路径
buffer: reader,
});
ctx.body = {
error: 0,
url: `https://${cosResult.Location}`,
};
});