在处理文件上传的时候,需要注意 配置的文件名称 否则会报400错误。

单文件上传

  1. 单文件上传
  2. <input type="file" id="file">
  3. <button onclick="sendFile()">上传</button>
  4. let file = null;
  5. document.getElementById('file').addEventListener('change', e => {
  6. file = e.target.files[0]
  7. })
  8. // 普通文件上传
  9. function sendFile() {
  10. const formData = new FormData();
  11. formData.append('file', file);
  12. axios({
  13. url: "http://localhost:3000/upload/file",
  14. method: "POST",
  15. data: formData
  16. })
  17. .then((result) => {
  18. console.log(result)
  19. }).catch((err) => {
  20. console.log(err);
  21. });
  22. }
  1. import { Body, Controller, Post, UploadedFile, UploadedFiles, UseInterceptors } from '@nestjs/common';
  2. // 引入文件上传模块
  3. import { FileInterceptor, FileFieldsInterceptor } from '@nestjs/platform-express'
  4. // 获取写入流
  5. import { createWriteStream } from 'fs'
  6. import { join } from 'path'
  7. @Controller('upload')
  8. export class UploadController {
  9. // 当个文件上传
  10. @Post('file')
  11. @UseInterceptors(FileInterceptor('file'))// 配置文件上传名称
  12. upload(@UploadedFile() file, @Body() body) {// UploadedFile 获取上传图片的信息
  13. let filePath = join(__dirname, '..', '..', 'public/images', `${Date.now()}-${file.originalname}`);
  14. let writeStream = createWriteStream(filePath)
  15. writeStream.write(file.buffer)
  16. return 'updata ok'
  17. }
  18. }

多文件上传

  1. <input type="file" id="file1">
  2. <input type="file" id="file2">
  3. <button onclick="sendFiles()">多文件上传</button>
  1. let file1 = null;
  2. let file2 = null;
  3. document.getElementById('file1').addEventListener('change', (e) => {
  4. file1 = e.target.files[0]
  5. })
  6. document.getElementById('file2').addEventListener('change', (e) => {
  7. file2 = e.target.files[0]
  8. })
  9. function sendFiles() {
  10. const formData = new FormData();
  11. formData.append('pic1', file1)
  12. formData.append('pic2', file2)
  13. axios({
  14. url: "http://localhost:3000/upload/files",
  15. method: "POST",
  16. data: formData
  17. })
  18. .then(res => {
  19. console.log(res);
  20. })
  21. .catch(err => {
  22. console.log(err);
  23. })
  24. }
  1. import { Body, Controller, Post, UploadedFile, UploadedFiles, UseInterceptors } from '@nestjs/common';
  2. // 引入文件上传模块
  3. import { FileInterceptor, FileFieldsInterceptor } from '@nestjs/platform-express'
  4. // 获取写入流
  5. import { createWriteStream } from 'fs'
  6. import { join } from 'path'
  7. @Controller('upload')
  8. export class UploadController {
  9. // 多个文件上传
  10. @Post('files')
  11. // 多个不同字段 用 FileFieldsInterceptor
  12. @UseInterceptors(FileFieldsInterceptor([
  13. { name: "pic1", maxCount: 1 },
  14. { name: "pic2", maxCount: 1 },
  15. ]))
  16. uploads(@UploadedFiles() files, @Body() body) {
  17. for (const k in files) {
  18. files[k].forEach(element => {
  19. console.log(element.originalname);
  20. let writeStream = createWriteStream(join(__dirname, `../../public/images`,`${Date.now()}-${element.originalname}`));
  21. writeStream.write(element.buffer)
  22. });
  23. }
  24. return '1'
  25. }
  26. }

完整代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>
  11. 单文件上传
  12. <input type="file" id="file">
  13. <button onclick="sendFile()">上传</button>
  14. </div>
  15. <div>
  16. 多文件上传
  17. <input type="file" id="file1">
  18. <input type="file" id="file2">
  19. <button onclick="sendFiles()">多文件上传</button>
  20. </div>
  21. </body>
  22. </html>
  23. <script>
  24. let file = null;
  25. document.getElementById('file').addEventListener('change', e => {
  26. file = e.target.files[0]
  27. })
  28. // 普通文件上传
  29. function sendFile() {
  30. const formData = new FormData();
  31. formData.append('file', file);
  32. axios({
  33. url: "http://localhost:3000/upload/file",
  34. method: "POST",
  35. data: formData
  36. })
  37. .then((result) => {
  38. console.log(result)
  39. }).catch((err) => {
  40. console.log(err);
  41. });
  42. }
  43. /**
  44. * 多文件上传
  45. */
  46. let file1 = null;
  47. let file2 = null;
  48. document.getElementById('file1').addEventListener('change', (e) => {
  49. file1 = e.target.files[0]
  50. })
  51. document.getElementById('file2').addEventListener('change', (e) => {
  52. file2 = e.target.files[0]
  53. })
  54. function sendFiles() {
  55. const formData = new FormData();
  56. formData.append('pic1', file1)
  57. formData.append('pic2', file2)
  58. console.log(file1);
  59. console.log(file2);
  60. axios({
  61. url: "http://localhost:3000/upload/files",
  62. method: "POST",
  63. data: formData
  64. })
  65. .then(res => {
  66. console.log(res);
  67. })
  68. .catch(err => {
  69. console.log(err);
  70. })
  71. }
  72. </script>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>
  11. 单文件上传
  12. <input type="file" id="file">
  13. <button onclick="sendFile()">上传</button>
  14. </div>
  15. <div>
  16. 多文件上传
  17. <input type="file" id="file1">
  18. <input type="file" id="file2">
  19. <button onclick="sendFiles()">多文件上传</button>
  20. </div>
  21. </body>
  22. </html>
  23. <script>
  24. let file = null;
  25. document.getElementById('file').addEventListener('change', e => {
  26. file = e.target.files[0]
  27. })
  28. // 普通文件上传
  29. function sendFile() {
  30. const formData = new FormData();
  31. formData.append('file', file);
  32. axios({
  33. url: "http://localhost:3000/upload/file",
  34. method: "POST",
  35. data: formData
  36. })
  37. .then((result) => {
  38. console.log(result)
  39. }).catch((err) => {
  40. console.log(err);
  41. });
  42. }
  43. /**
  44. * 多文件上传
  45. */
  46. let file1 = null;
  47. let file2 = null;
  48. document.getElementById('file1').addEventListener('change', (e) => {
  49. file1 = e.target.files[0]
  50. })
  51. document.getElementById('file2').addEventListener('change', (e) => {
  52. file2 = e.target.files[0]
  53. })
  54. function sendFiles() {
  55. const formData = new FormData();
  56. formData.append('pic1', file1)
  57. formData.append('pic2', file2)
  58. console.log(file1);
  59. console.log(file2);
  60. axios({
  61. url: "http://localhost:3000/upload/files",
  62. method: "POST",
  63. data: formData
  64. })
  65. .then(res => {
  66. console.log(res);
  67. })
  68. .catch(err => {
  69. console.log(err);
  70. })
  71. }
  72. </script>