得到这个错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined
这是我的html代码:
<!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代码:
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等模块
相似问题