js将图片上传服务器文件夹下,Egg.js 实现向服务器上传图片

1.安装时间处理 及 压缩 模块

yarn add silly-datetime pump

2.文件保存路径

config/config.default.js

config.uploadDir = 'app/public/avatar/upload';

3.创建tools service

app/service/tools.js

'use strict';

const Service = require('egg').Service;

const path = require("path");

const sd = require('silly-datetime');

const mkdirp = require('mkdirp');

class ToolsService extends Service {

/**

* 获取文件上传目录

* @param {*} filename

*/

async getUploadFile(filename) {

// 1.获取当前日期

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\avatar\upload\20200312\1536895331666.png

return {

uploadDir,

saveDir: this.ctx.origin + uploadDir.slice(3).replace(/\\/g, '/')

}

}

}

module.exports = ToolsService;

4.调用 controller

app/controller/article.js

// 保存头像/封面

async saveAvatar() {

const { ctx } = this;

const parts = 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

});

}

if(Object.keys(files).length > 0){

ctx.body = {

code: 200,

message: '图片上传成功',

data: files

}

}else{

ctx.body = {

code: 500,

message: '图片上传失败',

data: {}

}

}

}

5.配置路由

// 上传图片/头像/封面

router.post('/tools/saveavatar', controller.article.saveAvatar);

6.页面逻辑代码

封装组件

src/components/UploadAvatar.js

调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值