首页 > 解决方案 > CORS 阻止 Expressjs 中的文件上传

问题描述

我试过手动添加标题并使用 express cors。

我读过这个:https ://expressjs.com/en/resources/middleware/cors.html

按照说明进行操作,一切都很好,我发送的每个请求 [GET, PUT, POST,DELETE,PATCH] 都通过了,但是。如果我试图将文件上传到服务器 CORS 阻止了我。

消息:

从源“ https://app.example.xyz ”访问“ https://api.example.xyz/api/post ”处的 XMLHttpRequest已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头存在于请求的资源上。

但是如果我删除了处理从请求正文中移动文件的任何内容,CORS 块就消失了。

我已经尝试过 multr 、 express-fileupload 和使用节点 fs 手动移动图像,cors 总是阻止我。请帮忙。

如何使用 express 上传文件?这是我的服务器故障吗?它适用于本地。

标签: expresscors

解决方案


这可能是因为有两种 COR 请求,“简单请求”和“预飞行”请求。您没有显示您的代码(您应该这样做),但是您的症状听起来好像您正在处理简单的请求就好了,但是您的上传触发了预飞行请求并且您没有预飞行的 CORS 批准代码要求。

预飞行请求在发送实际请求并请求许可之前发送一个 OPTIONS 请求,并且您的服务器需要使用 CORS 标头正确响应 OPTIONS 请求,以允许浏览器发送预飞行请求。

您可以通过打开 Chrome 调试器并转到网络选项卡并查看浏览器在此请求期间向您的服务器发送的确切内容来确定发生了什么。

如果这个解释不足以让您弄清楚如何解决您的问题,那么请显示您的浏览器尝试发送该请求的网络选项卡中的确切屏幕截图,并显示您的服务器代码的相关部分,您的 COR 中间件和目标请求处理程序。


推荐阅读