本文共 2433 字,大约阅读时间需要 8 分钟。
可以通过 npm 来安装 mkdirp
�件:
npm i mkdirp --save
在你的项目中引入插件并使用:
import * as mkdirp from 'mkdirp';// 在相应位置使用mkdirp(dir);
enctype
否则上传失败确保前端表单正确配置 enctype
属性:
在图片路径中包含正确的目录结构,避免路径错误。
在 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 '上传成功'; }}
在 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; }}
存储图片上传的基础路径:
export class Config { static adminPath = 'admin'; static uploadDir = 'upload';}
在表单中添加上传功能:
转载地址:http://phbgz.baihongyu.com/