在处理文件上传的时候,需要注意 配置的文件名称 否则会报400错误。
单文件上传
单文件上传<input type="file" id="file"><button onclick="sendFile()">上传</button>let file = null;document.getElementById('file').addEventListener('change', e => {file = e.target.files[0]})// 普通文件上传function sendFile() {const formData = new FormData();formData.append('file', file);axios({url: "http://localhost:3000/upload/file",method: "POST",data: formData}).then((result) => {console.log(result)}).catch((err) => {console.log(err);});}
import { Body, Controller, Post, UploadedFile, UploadedFiles, UseInterceptors } from '@nestjs/common';// 引入文件上传模块import { FileInterceptor, FileFieldsInterceptor } from '@nestjs/platform-express'// 获取写入流import { createWriteStream } from 'fs'import { join } from 'path'@Controller('upload')export class UploadController {// 当个文件上传@Post('file')@UseInterceptors(FileInterceptor('file'))// 配置文件上传名称upload(@UploadedFile() file, @Body() body) {// UploadedFile 获取上传图片的信息let filePath = join(__dirname, '..', '..', 'public/images', `${Date.now()}-${file.originalname}`);let writeStream = createWriteStream(filePath)writeStream.write(file.buffer)return 'updata ok'}}
多文件上传
<input type="file" id="file1"><input type="file" id="file2"><button onclick="sendFiles()">多文件上传</button>
let file1 = null;let file2 = null;document.getElementById('file1').addEventListener('change', (e) => {file1 = e.target.files[0]})document.getElementById('file2').addEventListener('change', (e) => {file2 = e.target.files[0]})function sendFiles() {const formData = new FormData();formData.append('pic1', file1)formData.append('pic2', file2)axios({url: "http://localhost:3000/upload/files",method: "POST",data: formData}).then(res => {console.log(res);}).catch(err => {console.log(err);})}
import { Body, Controller, Post, UploadedFile, UploadedFiles, UseInterceptors } from '@nestjs/common';// 引入文件上传模块import { FileInterceptor, FileFieldsInterceptor } from '@nestjs/platform-express'// 获取写入流import { createWriteStream } from 'fs'import { join } from 'path'@Controller('upload')export class UploadController {// 多个文件上传@Post('files')// 多个不同字段 用 FileFieldsInterceptor@UseInterceptors(FileFieldsInterceptor([{ name: "pic1", maxCount: 1 },{ name: "pic2", maxCount: 1 },]))uploads(@UploadedFiles() files, @Body() body) {for (const k in files) {files[k].forEach(element => {console.log(element.originalname);let writeStream = createWriteStream(join(__dirname, `../../public/images`,`${Date.now()}-${element.originalname}`));writeStream.write(element.buffer)});}return '1'}}
完整代码
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://unpkg.com/axios/dist/axios.min.js"></script><title>Document</title></head><body><div>单文件上传<input type="file" id="file"><button onclick="sendFile()">上传</button></div><div>多文件上传<input type="file" id="file1"><input type="file" id="file2"><button onclick="sendFiles()">多文件上传</button></div></body></html><script>let file = null;document.getElementById('file').addEventListener('change', e => {file = e.target.files[0]})// 普通文件上传function sendFile() {const formData = new FormData();formData.append('file', file);axios({url: "http://localhost:3000/upload/file",method: "POST",data: formData}).then((result) => {console.log(result)}).catch((err) => {console.log(err);});}/*** 多文件上传*/let file1 = null;let file2 = null;document.getElementById('file1').addEventListener('change', (e) => {file1 = e.target.files[0]})document.getElementById('file2').addEventListener('change', (e) => {file2 = e.target.files[0]})function sendFiles() {const formData = new FormData();formData.append('pic1', file1)formData.append('pic2', file2)console.log(file1);console.log(file2);axios({url: "http://localhost:3000/upload/files",method: "POST",data: formData}).then(res => {console.log(res);}).catch(err => {console.log(err);})}</script>
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://unpkg.com/axios/dist/axios.min.js"></script><title>Document</title></head><body><div>单文件上传<input type="file" id="file"><button onclick="sendFile()">上传</button></div><div>多文件上传<input type="file" id="file1"><input type="file" id="file2"><button onclick="sendFiles()">多文件上传</button></div></body></html><script>let file = null;document.getElementById('file').addEventListener('change', e => {file = e.target.files[0]})// 普通文件上传function sendFile() {const formData = new FormData();formData.append('file', file);axios({url: "http://localhost:3000/upload/file",method: "POST",data: formData}).then((result) => {console.log(result)}).catch((err) => {console.log(err);});}/*** 多文件上传*/let file1 = null;let file2 = null;document.getElementById('file1').addEventListener('change', (e) => {file1 = e.target.files[0]})document.getElementById('file2').addEventListener('change', (e) => {file2 = e.target.files[0]})function sendFiles() {const formData = new FormData();formData.append('pic1', file1)formData.append('pic2', file2)console.log(file1);console.log(file2);axios({url: "http://localhost:3000/upload/files",method: "POST",data: formData}).then(res => {console.log(res);}).catch(err => {console.log(err);})}</script>
