我正在使用 Node.js、axios 和express。我有一个页面,可以让我上传文件,特别是 CSV、TXT 和 TSV,对于大约 20mb 大的文件,它上传没有问题,并继续正常使用我的端点。当我上传约 125MB+ 的较大文件时,它仅上传一小部分(范围为 20MB 到 70MB),并且由于(我推测)上传提前取消,因此它不会继续使用我的 API 端点的其余部分。
我尝试尽可能增加文件大小限制,并阅读了Multer的文档,我发现默认的文件大小限制是“Infinity”。我不知道还能尝试什么,因为我的控制台中没有错误,就好像 API 请求从未发生过一样。网络选项卡也没有帮助 - 它只是终止请求并且不显示请求参数或响应参数,实际上就好像什么都没有发送(但是发送了一些东西......)
VUE.JS 功能:
uploadFile() {
let formData = new FormData();
formData.append('file', this.file);
formData.append('type', this.fileType)
axios.post('http://localhost:3000/api/admin/dataset/add', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
},
SERVER.JS 端点:
const upload = multer({ dest: '../public/uploads/'})
app.post("/api/admin/dataset/add", upload.single('file'), async (req, res) => {
console.log("meow") /* This literally never gets accessed it dies after the "upload.single"
*/
}
可能的原因有很多(文件大小限制、客户端超时、网关超时、文件权限问题、与某些同步或备份程序或防病毒程序冲突等)。您的第一步是为 multer 安装足够的错误处理,以便您可以看到它报告的具体错误。
multer 文档中有一个示例,如下所示:
const multer = require('multer')
const upload = multer().single()
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
} else if (err) {
// An unknown error occurred when uploading.
}
// Everything went fine.
})
})
您显然可以对其进行自定义以适合您的路线并记录特定错误,但其中重要的部分是您可以查看 multer 报告的特定错误。