Egg 上传文件到七牛云

前言

老以前就注册了七牛云的对象存储,一直没用上。
最近想着不用白不用,毕竟白嫖的,就研究了下Egg怎么上传。
试过没问题后,简单记录下

安装依赖

npm install qiniu

相关代码
// controller/qiniu.js
const Controller = require('egg').Controller;

class QiniuController extends Controller {
   async uploadFiles() {
      const ctx = this.ctx;
      const result = await ctx.service.qiniu.uploadFiles(ctx);

      if (result) {
         ctx.body = result;
      } else {
         ctx.body = {
            message: "上传失败"
         }
      }
   }
}
// service/qiniu.js
const Service = require("egg").Service;
const fs = require("fs");
const path = require("path");
const qiniu = require("qiniu");
const md5 = require("md5");

//需要填写你的 Access Key 和 Secret Key , bucket空间
const accessKey = 'Access Key';
const secretKey = 'Secret Key';
const bucket = 'bucket';
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z0;  // 空间对应的机房

const options = {
   scope: bucket,
   expires: 7200,
   force: true,
   callbackBodyType: 'application/json'
};
const putPolicy = new qiniu.rs.PutPolicy(options);
const uploadToken = putPolicy.uploadToken(mac);

class qiniuService extends Service {
   async uploadFiles(data) {
      const timestamp = (new Date()).getTime();  // 当前时间戳
      const randomNum = Math.ceil(Math.random()*1000);  // 取1000以下的随机数

      try {
         const stream = await data.getFileStream(); // 文件不存在将响应400错误
         const extname = path.extname(stream.filename).toLocaleLowerCase();
         const filename = md5(path.basename(stream.filename, extname) + timestamp + randomNum) + extname;
         const formUploader = new qiniu.form_up.FormUploader(config);
         const putExtra = new qiniu.form_up.PutExtra();
      
         const result = await new Promise((resolve, reject) => {
            formUploader.putStream(uploadToken, filename, stream, putExtra, function(respErr, respBody, respInfo) {
               if (respErr) {
                 throw respErr;
               }
               if (respInfo.statusCode == 200) {
                 resolve(respBody);
               } else {
                 reject(respBody);
               }
            });
         });

         if (result != "") {
            return {
               data: result
            };
         } else {
            return false;
         }
      } catch (err) {
         return false;
      }
   }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容