首页 > 解决方案 > 带有 Multipart/form-data 的 PUT 请求仅在 Firefox 中失败

问题描述

我已经在 Edge、Chrome 和 Opera 上尝试过,我的上传工作正常,问题只发生在 Firefox 上:

从前端,我发送一个 multipart/form-data 请求,如下所示:

         $.ajax({
                    url: `/api/myUpdate/${$scope._id}`,
                    method: 'PUT',                  
                    data:formData,
                    contentType:false,
                    processData:false,
                    cache:false, 
                    success: response =>{
                        ..
                    },
                    error: err =>{
                        ..
                    }
                })

然后在我的 nodeJs 服务器上:

路线:

var multiparty = require('connect-multiparty');
    var multipartyMiddleware = multiparty({maxFieldsSize:'200mb'});
    app.route('/api/myUpdate/:_id')
        .post(users.requiresLogin, multipartyMiddleware, hasAuthorization, myUpdateFn);

调试时,我通过了我的 requireslogin 中间件,但它卡在了 multipartyMiddleware 中,它永远不会达到“hasAuthorization”或“myUpdateFn”。

当请求超时时,我在服务器上收到此输出错误

Error: Request aborted
    at IncomingMessage.onReqAborted (C:\dev\eedweb\node_modules\multiparty\index.js:190:17)
    at IncomingMessage.emit (events.js:182:13)
    at abortIncoming (_http_server.js:449:9)
    at socketOnClose (_http_server.js:442:3)
    at Socket.emit (events.js:187:15)
    at TCP._handle.close (net.js:610:12)

从我所做的调试来看,它似乎卡在了一个名为“async_hooks”的文件中......但我真的不明白它到底做了什么。

我尝试了不同的上传大小,但似乎并不影响结果。

前端没有错误消息,Firefox 检查器只显示网络选项卡中的标题,但 formdata 对象在浏览器中似乎是相同的,当我检查节点服务器中的对象时似乎是消息正文、参数、文件等。firefox 似乎没有在网络检查器中显示它。

难道我做错了什么?

标签: node.jsajaxfirefoxmultiparty

解决方案


推荐阅读