繁体   English   中英

上传图片时错误 413 payload too large

[英]Error 413 payload too large when upload image

我正在尝试通过使用base64进行图像检测从本地上传图像。
在 localhost 和 postman 中一切正常。
但是在部署之后,我得到了 CROS 错误。

我已经在server.js中得到了 cors 中间件

const express = require("express");    
const cors = require("cors");
const bodyParser = require("body-parser");

const app = express();

app.use(cors());

app.use(bodyParser.json({ limit: "10000kb", extended: true }));
app.use(bodyParser.urlencoded({ limit: "10000kb", extended: true }));

cors 中间件在使用 url 获取图像时工作正常,
但是当我尝试使用base64从本地上传图像时,控制台显示:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是我尝试过的解决方案:

  1. cors-anywhere
App.js

    const proxyUrl = 'https://cors-anywhere.herokuapp.com/';
    
    fetch(proxyUrl + API_CALL.IMAGE_URL, {
          method: 'post',
          headers: {'Content-Type': 'application/json'},
          body: JSON.stringify({
            inputLink: inputLink,
            inputMethod: inputMethod
          }),
          credentials: 'include'
        })

然后它显示413 payload too large

由于在localhost和postman测试都没有报错,所以我发现有文章说可能还是cors报错。

  1. CORS 预检

服务器.js

    const corsOptions = {
        origin: 'https://front-end-url/',
        methods: 'GET, POST, PUT',
        credentials: true,
        allowedHeaders: 'Content-Type,Authorization',
        exposedHeaders: 'Content-Range,X-Content- Range'
    };
    app.options('/imageUrl', cors(corsOptions));

它显示错误:

CORS policy: Response to preflight request doesn't pass access control check: 
The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' 
when the request's credentials mode is 'include'
  1. 在我删除credentials: 'include'之后,它再次显示413 payload too large

我很困惑......有谁知道如何解决它? 谢谢你。

最后通过在bodyParser之后放置express.json()修复错误。

像这样:

app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
app.use(express.json());

如果先运行 express.json(),express 会将全局限制设置为 1mb。

对于下一个需要更多细节的人: 错误:请求实体太大
对于需要设置 Nginx 配置文件的人: 在 AWS Elastic Beanstalk 上的 Nginx conf 中增加 client_max_body_size

在快递使用中

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

但是在 Nginx 中,您还必须编辑/etc/nginx/nginx.conf并在http块中添加以下行:

client_max_body_size 50M;

然后用sudo service nginx restart重启 Nginx

This solution is for ANDROID 

在我的例子中,@Headers("Content-Type: application/json")被额外使用,这是不需要的。

@多部分

@POST("user-management/user/profile") @Headers("Content-Type: application/json") fun updateProfileImage( @Part file: MultipartBody.Part,@Header("Authorization") authKey: String): Call<ProfileImageResponse>

我已经删除了 header @Headers("Content-Type: application/json") 作为我正在使用的多部分,所以不要在 header 以上使用。

删除 Header 代码后成功执行。

 @Multipart @POST("user-management/user/profile") fun updateProfileImage( @Part file: MultipartBody.Part,@Header("Authorization") authKey: String):Call<ProfileImageResponse>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM