首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我试图写一个上传文件接口的node.js案列,结果得到了一个错误:?

我试图写一个上传文件接口的node.js案列,结果得到了一个错误:?

提问于 2023-08-04 02:06:35
回答 1关注 0查看 123

得到这个错误:

代码语言:js
复制
TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined

这是我的html代码:

代码语言:js
复制
<!DOCTYPE html>
<html>

<head>
    <title>文件上传</title>
</head>

<body>
    <input type="file" id="fileInput">
    <button onclick="uploadFile()">上传</button>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
        function uploadFile() {
            const fileInput = document.getElementById('fileInput');
            const file = fileInput.files[0]; 
            const formData = new FormData();
            formData.append('file', file); 
            axios.post('http://localhost:8801/upload', 
            formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            }).then(response => {
                    console.log(response.data);
                })
                .catch(error => {
                    console.error(error);
                });
        }
    </script>
</body>

</html>

下面是node.js代码:

代码语言:js
复制
const cors = require("cors")
const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const { log } = require("console");
const app = express();
app.use(cors())
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
  const file = req.file;
  //获取原始文件名
  const originFile = file.originalname;
  console.log(originFile);
  //将原始文件名进行分割获取文件名的后缀
  const fileExt = originFile.split(".")[1];
  console.log(fileExt)
  //拼接新的文件名 用时间戳的方式
  const newFileNmae = Date.now() + "." + fileExt;
  console.log(newFileNmae)
  const filePath = path.join(__dirname, 'uploads', newFileNmae);
  // 检查路径是否存在,如果不存在则创建路径
  const directory = path.dirname(filePath);
  if (!fs.existsSync(directory)) {
    fs.mkdirSync(directory, { recursive: true });
  }  // 将上传的文件写入指定路径
  fs.writeFile(filePath, file.buffer, (err) => {
    if (err) {
      console.error(err);
      res.status(500).send('文件上传失败');
    } else {
      res.send('文件上传成功');
    }
  });
});
app.listen(8801, () => {
  console.log('服务端已启动,监听端口 8801');
});

我使用的node.js版本:v18.17.0

用了cors express multer path fs等模块

相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档