在 Spring 中上传文件而不使用表单数据
Upload File in Spring without using form data
我在 Java 中使用 Spring 框架。有了它,我正在尝试编写一个接受一个文件上传的 API 端点。我不想使用表单数据。基本上我希望以下 curl 命令在我的端点上工作
curl -XPOST localhost:8080/upload -d @local_file.data
有没有办法用 Spring 做到这一点?似乎我想将 @RequestBody 与 File 一起使用,但对大多数人来说这似乎是一个可怕的想法。为什么? MultipartFile 与 File 有何不同?只因为它支持表单数据?
我能找到的只是关于表单和 MultipartFile 的讨论。我在做什么本质上是错误的吗?我在使用 Python/Django 之前就已经完成了,并没有那么难。
看来我的问题的答案是将@RequestBody 与字节数组一起使用。这将启动 ByteArrayHttpMessageConverter,它是默认的 HttpMessageConverter 之一。我最终得到了一个像这样的 API 端点。
@RequestMapping(value = "/upload", method=RequestMethod.POST)
public Response uploadFile(@RequestBody byte[] file) {
...
}
初步测试工作。在 Spring 文档中找到它:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody
我在 Java 中使用 Spring 框架。有了它,我正在尝试编写一个接受一个文件上传的 API 端点。我不想使用表单数据。基本上我希望以下 curl 命令在我的端点上工作
curl -XPOST localhost:8080/upload -d @local_file.data
有没有办法用 Spring 做到这一点?似乎我想将 @RequestBody 与 File 一起使用,但对大多数人来说这似乎是一个可怕的想法。为什么? MultipartFile 与 File 有何不同?只因为它支持表单数据?
我能找到的只是关于表单和 MultipartFile 的讨论。我在做什么本质上是错误的吗?我在使用 Python/Django 之前就已经完成了,并没有那么难。
看来我的问题的答案是将@RequestBody 与字节数组一起使用。这将启动 ByteArrayHttpMessageConverter,它是默认的 HttpMessageConverter 之一。我最终得到了一个像这样的 API 端点。
@RequestMapping(value = "/upload", method=RequestMethod.POST)
public Response uploadFile(@RequestBody byte[] file) {
...
}
初步测试工作。在 Spring 文档中找到它:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody