nodejs用egg框架实现图片上传

1.创建app/public/admin/upload 文件夹用于存放上传的图片
2.在app/service/tools.js(工具)下写一个文件上传的方法
 /**
   * 获取文件上传目录
   * @param {*} filename
   */
  async getUploadFile(filename) {
    // 1、获取当前日期     20180920
    let day = sd.format(new Date(), 'YYYYMMDD');
    // 2、创建图片保存的路径
    let dir = path.join(this.config.uploadDir, day);
    await mkdirp(dir); // 不存在就创建目录
    let date = Date.now(); /* 毫秒数*/
    // 返回图片保存的路径
    let uploadDir = path.join(dir, date + path.extname(filename));
    // app\public\admin\upload\20190914\1536895331444.png
    return {
      uploadDir,
      saveDir: this.ctx.origin + uploadDir.slice(3).replace(/\\/g, '/'),
    };
  }

3.在app/controller/XXX.js 文件下面调用方法
   async saveAdvertising() {

    const parts = this.ctx.multipart({ autoFields: true });
    let files = {};
    let stream;
    while ((stream = await parts()) != null) {
      if (!stream.filename) {
        break;
      }
      const fieldname = stream.fieldname; // file表单的名字

      // 上传图片的目录
      const dir = await this.service.tools.getUploadFile(stream.filename);
      const target = dir.uploadDir;
      const writeStream = fs.createWriteStream(target);

      await pump(stream, writeStream);

      files = Object.assign(files, {
        [fieldname]: dir.saveDir,
      });
    }
    const params = Object.assign(files, parts.field);
     const params = Object.assign(files, parts.field);
    if (params.action == 0) { // 添加分享
      await this.service.advertising.addAdvertising(params);
    //   await this.service.operationLog.saveOperationLog(OPERATION_TYPE_CREATE, result, SYSTEM, SHARE);
    } else if (params.action == 1) { // 修改分享
    //   delete params.action;
      //   await this.service.operationLog.saveOperationLog(OPERATION_TYPE_UPDATE, params, SYSTEM, SHARE);
      await this.service.advertising.editAdvertising(params);
    }
    this.ctx.body = {
      status: 0,
    };
  }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值