Spring:文件上传时不允许使用方法

Posted

技术标签:

【中文标题】Spring:文件上传时不允许使用方法【英文标题】:Spring: Method Not Allowed on file uploading 【发布时间】:2018-01-17 18:22:21 【问题描述】:

我正在编写 REST 控制器,它应该允许用户上传他们的文件。

我有课

@RestController
@RequestMapping("/profiles/userId/files")
public class FileController 

   @PostMapping(path = "upload")
   public String uploadFile(@PathVariable("userId") long userId,
                                             @RequestParam("file") MultipartFile file) throws IOException 
   //some logic here

   

但我明白了


"timestamp": 1502301243676,
"status": 405,
"error": "Method Not Allowed",
"message": "Method Not Allowed",
"path": "/profiles/12351/files/upload"

我做错了吗?没有@PathVariable 的发布请求可以正常工作,但我需要这个。

【问题讨论】:

你是如何调用这个资源的? @RossiRobinsion 通过邮递员 可能需要CSRF Token。 @RossiRobinsion 它看起来不像这样。我目前没有任何安全措施。 您能告诉我们POSTMAN 请求和标头(如果有的话)吗? 【参考方案1】:

谢谢各位。至少我找到了原因。 这是我的错:我有许多不同的控制器,其中一个是 "/profiles/userId/source" 使用映射到同一端点的 GET 方法。 所以这个控制器试图处理我的请求,但不能。 我改变了它的路径,我的第一个变成了工作。 感谢您的关注和回答。

【讨论】:

【参考方案2】:

使用下面的代码

@RestController
    @RequestMapping("/profiles/userId/files")
    public class FileController 

       @RequestMapping(value = "upload", method = RequestMethod.POST )
       public String uploadFile(@PathVariable("userId") long userId,
                                                 @RequestParam("file") MultipartFile file) throws IOException 
       //some logic here

       

【讨论】:

@PostMapping 没有“方法”参数。它相当于@RequestMapping(method = POST) @Akash requestmapping with requestmethod post相当于postmapping,你的代码是一样的 @AmerQarabsa requestmapping 包含方法,根据 spring 文档,docs.spring.io/spring/docs/current/javadoc-api/org/… 请看一下,我不知道你为什么不赞成我的回答。 @Akash 是 requestmapping + requestMethod.post = postmapping ,问题和你的答案之间没有真正的区别

以上是关于Spring:文件上传时不允许使用方法的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud —— feign文件上传

记录spring boot 图片上传与显示

通过 Spring WebClient 流式上传大文件

form表单上传文件使用multipart请求处理

Spring mvc 文件上传的问题。@RequestParam(required = false)

您的 WSGIPath 引用了在 AWS Elastic Beanstalk 中上传烧瓶应用程序时不存在的文件