class UploadService extends Service {
async uploadStrom(stream) {
// const stream = await this.ctx.getFileStream();
console.log('-----------获取数据 start--------------');
console.log(stream.fields);
console.log('-----------获取数据 end--------------');
// 基础的目录
const uplaodBasePath = 'app/public/uploads';
// 生成文件名
const filename = `${Date.now()}${Number.parseInt(
Math.random() * 1000,
)}${path.extname(stream.filename).toLocaleLowerCase()}`;
// 生成文件夹
const dirname = dayjs(Date.now()).format('YYYY/MM/DD');
function mkdirsSync(dirname) {
if (fs.existsSync(dirname)) {
return true;
} else {
if (mkdirsSync(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
}
mkdirsSync(path.join(uplaodBasePath, dirname));
// 生成写入路径
const target = path.join(uplaodBasePath, dirname, filename);
// 写入流
const writeStream = fs.createWriteStream(target);
try {
//异步把文件流 写入
await awaitWriteStream(stream.pipe(writeStream));
} catch (err) {
//如果出现错误,关闭管道
await sendToWormhole(stream);
this.ctx.body = "错误"
return null
// this.error();
}
return { url: path.join('/public/uploads', dirname, filename) }
// this.success({ url: path.join('/public/uploads', dirname, filename) });
}
async uploadCos(stream) {
var cos = new COS({
SecretId: 'AKIDUs4Qdc3w9IDGBoDPM5DLGvYw4xZrrev',
SecretKey: 'Byg8KK7fz457zblocBUo3lW1HI3XFo6'
});
let result = await new Promise((reslove, reject) => {
cos.putObject({
Bucket: 'img-125916267',
/* 必须 */
Region: 'ap-nanjng',
/* 必须 */
Key: stream.filename,
/* 必须 */
StorageClass: 'STANDARD',
Body: stream, // 上传文件对象
onProgress: function(progressData) {
console.log(JSON.stringify(progressData));
}
}, function(err, data) {
if (!err) {
reslove(data)
} else {
reject(err)
}
console.log(err || data);
});
})
return result
}
2. serverless如果设计到上传文件 需要开启 api网关提供的base64编码能力 只需要在 serverless.yml中配置 isBase64Encoded 为 true
# 欢迎使用 ⚡️serverless⚡️ 组件
#
# serverless组件是基于具体使用场景(Express, 静态网站等)提供的定制云资源编排和组织的解决方案。
# 这是serverless的主要配置文件,包含了一些使用示例以及注释说明。
# 您只需几行配置描述,即可进行云函数、API 网关、COS、DB 等
# Serverless 资源进行快速创建、部署和修改。
#
# 有关完整的配置选项,请检查文档:
# https://cloud.tencent.com/document/product/1154/51080
#
#
发表评论