七牛云v7版本文件上传
前言
安装
npm install qiniu@7.7.0
目前最新是v7,看文档的时候⚠️请注意
sdk
的版本,因为不同版本的配置和步骤不一样
使用
这里的用例使用了egg
作为示例,主要的核心方法是qiNiuUpload
方法
'use strict';
const Controller = require('egg').Controller;
// 导入七牛云sdk
const qiniu = require('qiniu');
class HomeController extends Controller {
async index() {
const { ctx } = this;
const file = ctx.request.files[0];
const res = await this.qiNiuUpload(file);
console.log(res);
ctx.body = ('hi, egg');
}
qiNiuUpload(file) {
return new Promise((resolve, reject) => {
// 获取【文件名】【文件路径】
const { filename: fileName, filepath: filePath } = file;
// 配置【accessKey, secretKey, bucket】
const accessKey = '七牛云accessKey';
const secretKey = '七牛云secretKey';
const bucket = '七牛云存储桶名称';
// 获取鉴权对象mac
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
// 获取上传凭证
const putPolicy = new qiniu.rs.PutPolicy({ scope: bucket });
// 获取上传token
const uploadToken = putPolicy.uploadToken(mac);
// 上传文件之前,必须要构建一个上传用的config对象
const config = new qiniu.conf.Config();
// 空间对应的机房 => 华东-浙江:z0 || 华东-浙江2:cn-east-2 || 华北-河北:z1 || 华南-广东:z2 || 北美-洛杉矶:na0 || 亚太-新加坡(原东南亚):as0 || 亚太-首尔:ap-northeast-1
// [官方文档](https://developer.qiniu.com/kodo/1671/region-endpoint-fq)
config.zone = qiniu.zone.Zone_z0;
const formUploader = new qiniu.form_up.FormUploader(config);
const putExtra = new qiniu.form_up.PutExtra();
// 文件上传
formUploader.putFile(uploadToken, fileName, filePath, putExtra, (err, ret) => {
if (!err) {
// 上传成功, 处理返回值
// console.log(ret.hash, ret.key);
resolve(ret);
} else {
// 上传失败, 处理返回代码
// console.log(err);
reject(err);
}
});
});
}
}
module.exports = HomeController;
提示
在实际的生产环境中,我们一般还需要:
- 处理文件名
- 校验文件类型
- 校验文件大小
- 上传后回调的是文件名,需要手动拼接请求url再返回给前端