一、 NestJS file-upload 官方文档
https://docs.nestjs.cn/8/techniques?id=%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0
二、单个、多个文件上传
import { Body, Controller, Get, Post, Render, UseInterceptors, UploadedFile, UploadedFiles } from '@nestjs/common';import { FileFieldsInterceptor, FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; // 上传文件import { createWriteStream } from 'fs'; // node 自带的文件模块import { join } from 'path'; // 使用 join 拼接路径@Controller('upload')export class UploadController {@Get()@Render('default/upload')index() {}// 单个文件上传@Post('doAdd')@UseInterceptors(FileInterceptor('pic')) // pic 是上传文件的name属性doAdd(@Body() body, @UploadedFile() file) {console.log(body)console.log(file) // 上传图片的信息var writeStream = createWriteStream(join(__dirname, '../../public/upload', `${Date.now()}-${file.originalname}`))writeStream.write(file.buffer)return '上传图片成功'}// 多个文件上传name属性一样@Post('doAdd')@UseInterceptors(FilesInterceptor('pic')) // 上传多个文件时,如果name属性一样就直接使用FilesInterceptor即可doAdds1(@Body() body, @UploadedFiles() files) {// files 返回的是个数组for (const file of files) { // 遍历数组const writeImage = createWriteStream(join(__dirname, '../../', 'public/upload', `${body.title}-${Date.now()}-${file.originalname}`));writeImage.write(file.buffer);}return '上传图片成功'}// 多个文件上传name属性不一样@Post('doAdds')@UseInterceptors(FileFieldsInterceptor([ // 上传多个文件时,如果name属性不一样就直接使用FileFieldsInterceptor即可{ name: 'pic1', maxCount: 1 },{ name: 'pic2', maxCount: 1 },{ name: 'pic3', maxCount: 1 },]))doAdds2(@Body() body, @UploadedFiles() files) {// files 返回的是个对象for (const i in files) { // 遍历对象const file = files[i][0]const writeImage = createWriteStream(join(__dirname, '../../', 'public/upload', `${body.title}-${Date.now()}-${file.originalname}`));writeImage.write(file.buffer);}return '上传图片成功'}}
三、注意事项
- 上传图片的时候 From 表单中需要配置 enctype=”multipart/form-data”
<form action="upload/doAdd" method="post" enctype="multipart/form-data"><input type="text" name="title1" id="" placeholder="新闻标题"><br><br><input type="text" name="keywords" id="" placeholder="关键词"><br><br><input type="text" name="author" id="" placeholder="作者"><br><br><input type="file" name="pic" id=""><br><br><input type="submit" value="提交"></form>
