Express Gateway无法传递multipart/formdata问题求助
问题:Express Gateway转发Multipart文件丢失的解决办法
我使用Express Gateway作为服务网关,其中一个服务需处理图片更新需求。单独运行该服务时,可通过multer解析接收文件;但部署在Express Gateway之后,文件会丢失,请求体中无法获取文件。尝试了以下配置但无效:
policies: - request-transformer: - action: multipart: true - cors: - action: credentials: true
解决方案
调整策略执行顺序
request-transformer的multipart: true配置本身没问题,但必须放在所有可能修改请求体的策略(比如cors)之前执行,否则multipart数据可能被提前处理导致丢失。调整后的配置示例:policies: - request-transformer: - action: multipart: true - cors: - action: credentials: true配置网关的multipart解析器
Express Gateway默认的body-parser可能会提前消耗multipart请求数据,需要在config.yml的http节点下明确启用并配置multipart解析:http: parsers: multipart: enabled: true limit: '10mb' # 根据实际文件大小需求调整同步后端multer配置
确保后端服务的multer配置与网关匹配:比如网关设置的文件大小限制,后端multer的限制值不能小于该数值;同时检查multer是否存在来源限制,避免请求被拦截。开启代理的请求头保留
如果上述方案无效,可在proxy策略中添加preserveHostHeader: true,确保请求头完整传递到后端服务:policies: - request-transformer: - action: multipart: true - proxy: - action: serviceEndpoint: your-service-name preserveHostHeader: true - cors: - action: credentials: true
内容的提问来源于stack exchange,提问作者mohammad
相关产品推荐
相关产品推荐

