阅读 249

Egg.js上传图片到对象存储COS并按照日期存储图片

上传图片到腾讯云的COS上

  1. 控制器中写法

async doAdd() {     const { ctx } = this;     const body = ctx.request.body;     const file = ctx.request.files[0];     const source = fs.createReadStream(file.filepath);     if (file) {       await this.ctx.service.tools.uploadCos(file.filename,source);     }     ctx.body = {       body, file     }   }    复制代码

  1. 在service中定义好要上传的函数

async uploadCos(filename, body) {     var cos = new COS({       SecretId: 'AKID4xbz6wWNyIM8droUt0qQjkUyBCwPbW9V',       SecretKey: '7xWoqb7OSHpxxx'     });     return new Promise((resolve,reject) => {       cos.putObject({         Bucket: 'eggshop-1301559367', /* 必须 */         Region: 'ap-beijing',    /* 必须 */         Key: filename,              /* 必须 */         StorageClass: 'STANDARD',         Body: body, // 上传文件对象         onProgress: function (progressData) {           console.log(JSON.stringify(progressData));         }       }, function (err, data) {         // console.log(err || data);         if (!err) {           resolve(data);         } else {           reject(err);         }       });     })   } 复制代码

上传文件根据时间进行文件夹分类

  1. 在service中定义好上传到COS上的文件路径

  // 上传到COS上的路径格式   getCosUploadFile(filename) {     // 获取当前的日期     let dir = sd.format(new Date(), 'YYYYMMDD');     // 生成文件名称     let unix = this.getUnixTime();     let saveDir = dir + "/" + unix + path.extname(filename)     return saveDir;   } 复制代码

  1. 在service中定义好上传到COS上的函数

  async uploadCos(filename, body) {     var cos = new COS({       SecretId: 'AKID4xbz6wWNyIM8droUt0qQjkUyBCwPbW9V',       SecretKey: '7xWoqb7OSHp65nEOGsCF1WkhNltDG2bs'     });     return new Promise((resolve,reject) => {       cos.putObject({         Bucket: 'eggshop-1301559367', /* 必须 */         Region: 'ap-beijing',    /* 必须 */         Key: filename,              /* 必须 */         StorageClass: 'STANDARD',         Body: body, // 上传文件对象         onProgress: function (progressData) {           console.log(JSON.stringify(progressData));         }       }, function (err, data) {         // console.log(err || data);         if (!err) {           resolve(data);         } else {           reject(err);         }       });     })   } 复制代码

  1. 在控制器中的写法

  async doAdd() {     const { ctx } = this;     const body = ctx.request.body;     const file = ctx.request.files[0];     if (file) {       const source = fs.createReadStream(file.filepath);       let filename = this.ctx.service.tools.getCosUploadFile(file.filename);       await this.ctx.service.tools.uploadCos(filename,source);     }     ctx.body = {       body, file     }   } 复制代码

注意:如果上传到COS上的图片路径中包含小数点,是因为获取时间戳的时间需要向上进行取整。

getUnixTime() {     let obj = new Date();     return Math.ceil(obj.getTime() / 1000); } 复制代码

将本地数据库上传到云上

  1. 将数据库的结构和数据存储到本地

image.png

  1. 建立一个云数据库并通过Navicat进行连接后,通过运行SQL文件导入我们第一步创建的SQL文件。

image.png

  1. 修改数据库配置

  config.sequelize = {     dialect: 'mysql',     host: 'rm-2zenx6363vhj8129ryo.mysql.rds.aliyuncs.com',     port: 3306,     username: "xxx",     password: "xxx",     database: 'eggshop',   };


作者:Always_positive
链接:https://juejin.cn/post/7033174134385278983


文章分类
百科问答
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐