开发者生态
evening
微信小程序上传图片时返回 413,Nginx 和 Spring Boot 应该如何配置?
2026-07-21
1 阅读
约9分钟阅读
梓彤科技
字号:
最近在开发一个微信小程序的图片上传功能,小程序通过wx.uploadFile将图片上传到更新接口。开发者工具中上传较小的图片可以成功,但在真机环境中上传体积增大的图片时,接口返回以下错误:413 Request Entity Too Large 目前的项目环境如下:微信小程序重新开发Nginx 1.24 Spring Boot 3 Linux服务器HTTPS小接口程序端代码上传如下:wx.chooseMedia({ count: 1、mediaType: ['image'], sourceType: ['album', 'camera'], success(res) { const filePath = res.tempFiles[0].tempFilePath wx.uploadFile({ url: 'https://example.com/api/upload/image', filePath, name: 'file', success(uploadRes) { console.log('上传结果:', uploadRes) }, failed(error) { console.error('上传失败:', error) } }) } }) Nginx 当前的接口代理配置如下: server { Listen 443 ssl;服务器名称 example.com;位置 /api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header 主机 $host; proxy_set_header X-真实IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; Spring Boot 接口代码如下: @RestController @RequestMapping("/upload") public class UploadController { @PostMapping("/image") public Map uploadImage( @RequestParam("file") MultipartFile file) { Map result = new HashMap<>(); result.put("文件名", file.getOriginalFilename()); result.put("fileSize", file.getSize());返回结果;目前观察到的情况是:1MB左右的图片通常可以上传;体积增大的图片很容易返回413;请求还进入Spring Boot控制器;Nginx日志中能够请求被拒绝;开发者工具和真机选择没有的图片体积可能不同。想确认以下几个问题:这个413错误是否主要由Nginx的请求体限制引起?除了Nginx,Spring Boot是否也需要设置上传文件大小? client_max_body_size 应该配置在 http、server 还是位置中?修改配置后,应该如何确认新的限制已经生效?小程序端是否有必要在上传前压缩图片或者限制图片大小?期望实现的效果是:允许上传一定大小范围内的图片,超过限制时返回明确的 JSON 错误信息,而不是直接显示 Nginx 的 413 页面。目前已经进行了以下排查和尝试。 1.检查请求是否进入我在 Spring Boot 中上传接口中增加了日志: @PostMapping("/image") public Map uploadImage( @RequestParam("file") MultipartFile file) { System.out.println("进入上传接口"); System.out.println("文件大小:" + file.getSize()); Map 结果 = new HashMap<>();结果.put("成功", true);返回结果; 2. Nginx 请求体限制尝试在接口代理中增加: location /api/ { client_max_body_size 20m; } 修改上传小图片时能够看到日志,上传大图片时没有输出,初步判断请求在进入 Spring Boot 之前就被拦截了。 proxy_pass http://127.0.0.1:8080/; proxy_set_header 主机 $host; proxy_set_header X-真实IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; 3. Spring Boot 上传限制 在 application.yml 中增加了: spring: servlet: multipart: max-file-size: 10MB max-request-size: 20MB 修改后重新启动了 Spring Boot 服务。但由于大文件请求之前没有进入控制器,目前无法确定 Nginx 配置大小限制未生效,还是还有其他位置。 4. 检查 Nginx 日志,在错误日志中看到了类似信息:客户端打算发送太大的正文因此怀疑主要问题仍然来自 Nginx。 5. 尝试在小程序端压缩图片在选择图片后增加了压缩处理: wx.compressImage({ src: filePath,quality: 70, success(compressRes) { wx.uploadFile({ url: 'https://example.com/api/upload/image', filePath: compressRes.tempFilePath, name: 'file' }) } }) 压缩后部分图片能够上传成功,不过只能缩小文件体积,不能确认服务器端的正确配置方式。希望一个比较完整的处理建议,包括: Nginx 中上传大小的合适限制配置位置; Spring Boot 的文件大小配置;验证 Nginx新配置是否已经生效;超出限制时如何返回统一的JSON错误;小程序上传前是否应该同时进行文件体积检查和图片压缩。 ## 推荐标签 微信小程序 Nginx Spring Boot 文件上传
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱