4mb图像文件上传在上传到生产服务器时出现HTTP 413错误

时间:2016-12-05 16:56:45

标签: node.js .htaccess express elastic-beanstalk body-parser

我正在尝试将图像从客户端上传到服务器进行处理,然后再上传到S3 AWS存储桶。它在本地服务器上运行良好,但在实时服务器上运行不正常。

XMLHttpRequest cannot load https://api.parthenon-click.com/img_upload/cover. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.parthenon-click.com' is therefore not allowed access. The response had HTTP status code 413.

我正在将ElasticBeanstalk PHP v5.4用于客户端服务器,将Node v7.0与Express v4服务器用于后端。客户端是简单的html / css / jQuery。我从用户库中抓取一张照片,并使用以下内容将其传递到后端:

    $.ajax({
      url: api_url,
      type: 'POST',
      data: form,
      processData: false,
      contentType: false,
      success: function(data){
          console.log('upload successful!');
      },
      error: function(err){
          console.log(err);
      }
});

只要文件小于1mb,这就可以并保存图像。虽然我仍然收到504 HTTP错误。 只要我正在运行本地服务器,无论文件大小是多少都可以。

所以我尝试提升body-parserhtaccessmulter限制:

Body-Parser:

app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit:50000 }));
app.use(bodyParser.raw({ limit: '10mb'}) );

Multer:

var upload = multer({
    storage: storage,
    limits: {
        fileSize: 10000000
    }
})

htaccess的:

php_value upload_max_filesize 30M

我的头文件是每个其他类型的api请求都可以使用的。我用它们设置它们:

router.use(function(req, res, next) {
    // do logging
        //set CORS policy to 'allow'
    res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET");
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    next();
});

最后,但并非最不重要的是,所有域版本都启用了SSL。

这些都没有解决问题。我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

在Node之前使用像Nginx这样的网络服务器时,所有请求都会通过Nginx并在到达Node.js之前由nginx验证。

Nginx默认配置文件位于/etc/nginx/nginx.conf。此文件的所有请求都有许多默认属性,其中一个是client_max_body_size。该属性的默认值为1m,与您的1MB文件类似。

这也是你的.htaccess文件没有做任何事情的原因(Node.js本身从不对.htaccess做任何事情,除非你想要它)

您可以手动将其更改为其他数字,并且这将是nginx的新最大体型大小(重新加载nginx之后),但如果您想要"完整"控制并让应用程序检查正文大小,您也可以将其设置为0,以禁用检查客户端请求的正文大小。
Setting size to 0 disables checking of client request body size.

请注意,更改该属性也会更改PHP请求的最大上载大小。