![](/img/trans.png)
[英]Payload too large error (413) when uploading using JS Fetch API. Works fine via Postman
[英]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.
这是我尝试过的解决方案:
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报错。
服务器.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'
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.