博客
关于我
6.封装上传图片方法,按日期存储图片
阅读量:732 次
发布时间:2019-03-21

本文共 2486 字,大约阅读时间需要 8 分钟。

重要知识与坑

mkdir 创建文件夹的插件

安装

可以通过 npm 来安装 mkdirp �件:

npm i mkdirp --save

引入

在你的项目中引入插件并使用:

import * as mkdirp from 'mkdirp';
// 在相应位置使用
mkdirp(dir);

前端页面需要加 enctype 否则上传失败

确保前端表单正确配置 enctype 属性:

注意配图片的路径

在图片路径中包含正确的目录结构,避免路径错误。


封装上传文件方法

Controller 使用

Controller 中使用 FileInterceptor

import { Controller, Get, Render, Post, Body, UseInterceptors, UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { Config } from '../config/config';
import { ToolsService } from '../service/tools/tools.service';
@Controller(`${Config.adminPath}/focus`)
export class FocusController {
constructor(
private toolsService: ToolsService
) {}
@Get()
index() {
return '图片列表';
}
@Get('add')
@Render('admin/focus/add')
add() {
return {};
}
@Post('doAdd')
@UseInterceptors(FileInterceptor('focus_img'))
doAdd(@Body() body, @UploadedFile() file) {
const saveDir = this.toolsService.uploadFile(file);
return '上传成功';
}
}

Service 封装上传方法

ToolsService 中实现上传逻辑:

import { format } from 'silly-datetime';
import { join, extname } from 'path';
import { Config } from '../config/config';
import * as mkdirp from 'mkdirp';
import { createWriteStream } from 'fs';
@Injectable()
export class ToolsService {
uploadFile(file) {
const day = format(new Date(), 'YYYYMMDD');
const dir = join(__dirname, `../../../public/${Config.uploadDir}`, day);
mkdirp.sync(dir); // 确保目录存在
const uploadDir = join(dir, `${Date.now()}${extname(file.originalname)}`);
const writeStream = createWriteStream(uploadDir);
writeStream.write(file.buffer);
const saveDir = join(Config.uploadDir, day, `${Date.now()}${extname(file.originalname)}`);
console.log('图片保存地址:', saveDir);
return saveDir;
}
}

Config 全局配置

存储图片上传的基础路径:

export class Config {
static adminPath = 'admin';
static uploadDir = 'upload';
}

前端页面使用

在表单中添加上传功能:

转载地址:http://phbgz.baihongyu.com/

你可能感兴趣的文章
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>
npm start运行了什么
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm入门,这篇就够了
查看>>
npm切换到淘宝源
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>
npm学习(十一)之package-lock.json
查看>>
npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm的常用配置项---npm工作笔记004
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
npm配置安装最新淘宝镜像,旧镜像会errror
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>