为什么我的 Multer 只上传一小部分文件然后终止 API 请求

问题描述 投票:0回答:1

我正在使用 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"
*/
}
node.js vue.js express axios multer
1个回答
0
投票

可能的原因有很多(文件大小限制、客户端超时、网关超时、文件权限问题、与某些同步或备份程序或防病毒程序冲突等)。您的第一步是为 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 报告的特定错误。

© www.soinside.com 2019 - 2024. All rights reserved.