在处理文件上传的时候,需要注意 配置的文件名称
否则会报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>