serverless中上传文件到cos云存储中2点注意 - 前端笔记-1.需要把cos上传代表改成异步 classUploadServiceextendsService{ asyn...

学习笔记

点滴记忆
回忆过往
首页>> web前端 >>serverless中上传文件到cos云存储中2点注意 - 前端笔记
1.需要把cos上传代表改成异步
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(uplaodBasePathdirname));
        // 生成写入路径
        const target = path.join(uplaodBasePathdirnamefilename);
        // 写入流
        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'dirnamefilename) }
        // 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((reslovereject=> {
            cos.putObject({
                Bucket: 'img-125916267',
                /* 必须 */
                Region: 'ap-nanjng',
                /* 必须 */
                Key: stream.filename,
                /* 必须 */
                StorageClass: 'STANDARD',
                Body: stream// 上传文件对象
                onProgress: function(progressData) {
                    console.log(JSON.stringify(progressData));
                }
            }, function(errdata) {
                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
#

×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:前端笔记 » serverless中上传文件到cos云存储中2点注意

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)