当前位置: 首页 > 知识库问答 >
问题:

如何在REST控制器中获取分层多部分请求数据?

洪安顺
2023-03-14

有一个spring mvc控制器资源来接收文件并将其存储在本地存储器中。请求是一个多部分(“内容类型:多部分/表单数据”),由几个部分组成。第一部分是文件的JSON/XML描述。第二个和以下是文件。但这些部分也可能是多部分的(“内容类型:多部分/混合”)。一部分中的文件很少。多部分中的多部分。

POST /exampleAPI/nms/v1/myStore/tel%3A%2B19585550100/objects/operations/bulkCreation HTTP/1.1
Accept: application/xml
Authorization: BEARER 08776724-6d0d-4aa6-a404-2bc19b5cf903
Host: example.com
Content-Type: multipart/form-data; boundary="===============outer123456==";
Content-Length: nnnn
MIME-Version: 1.0
--===============outer123456==
Content-Type: application/xml
Content-Disposition: form-data; name=”root-fields”
<?xml version="1.0" encoding="UTF-8"?>
<nms:objectList xmlns:nms="urn:oma:xml:rest:netapi:nms:1">
<object>
 <parentFolder>http://example.com/exampleAPI/nms/v1/myStore/tel%3A%2B19585550100/folders/fld123</parentFolder>
<attributes/>
 <flags>
 <flag>\Seen</flag>
 <flag>\Flagged</flag>
 </flags>
</object>
<object>
 <parentFolderPath>/Pictures</parentFolderPath>
 <attributes/>
 <flags>
 <flag>\Seen</flag>
 </flags>
</object>
</nms:objectList>
--===============outer123456==
Content-Type: multipart/mixed; boundary=”--=-sep-=--”
Content-Disposition: form-data; name=”attachments”
----=-sep-=--
Content-Type: text/plain
Content-Disposition: attachment; filename=”body.txt”
See attached photo
----=-sep-=--
Content-Type: image/gif
Content-Disposition: attachment; filename="picture.gif"
GIF89a...binary image data...
----=-sep-=----
--===============outer123456==
Content-Type: multipart/mixed; boundary=”--=-sep-=--”
Content-Disposition: form-data; name=”attachments”
----=-sep-=--
Content-Type: text/plain
Content-Disposition: attachment; filename=”body.txt”
Photo from trip to Vancouver
----=-sep-=--
Content-Type: image/gif
Content-Disposition: attachment; filename="picture.gif"
GIF89a...binary image data...
----=-sep-=----
--===============outer123456==--

我必须根据请求结构将它们分组存储。身体txt和图片。gif来自一个组中的第二个表单数据部分,文件来自另一个组中的第三个表单数据部分。但使用MultipartFile或Part或MultipartHttpServletRequest时,没有关于嵌套的信息,所有文件都在一个级别上。

如何在层次结构中接收多部分数据?

@RestController
public class AttachmentController {

@PostMapping(path = ("/upload"), consumes = {"multipart/form-data", "multipart/mixed"})
public Response uploadFiles(
        @RequestPart(value = "description") FilesDescription fileDesc,
        @RequestPart(value = "attachments", required = false) List<MultipartFile> attachments) {

共有1个答案

宁侯林
2023-03-14

此行为指的是RFC 2388,已被RFC 7578淘汰。

RFC 7578 4.3

[RFC2388]建议使用嵌套的“多部分/混合”部分传输单个表单字段的多个文件。此用法已弃用。

为了匹配广泛部署的实现,必须通过在单独的部分中提供每个文件来发送多个文件,但所有文件都具有相同的“name”参数。

接收具有广泛适用性的应用程序(例如,多部分/表单数据解析库)也应支持提供多个文件的旧方法。

大多数现代库都实现RFC 7578行为。由于名称“name=attachments”相同,多部分/混合内容的所有部分将放在同一个数组中。

基于此,在multipart/form-data下分层解析嵌套的multipart/混合的要求可能被认为是过时的。

 类似资料:
  • 访问控制器 ThinkPHP引入了分层控制器的概念,通过URL访问的控制器为访问控制器层(Controller)或者主控制器,访问控制器是由\think\App类负责调用和实例化的,无需手动实例化。 URL解析和路由后,会把当前的URL地址解析到 [ 模块/控制器/操作 ],其实也就是执行某个控制器类的某个操作方法,下面是一个示例: <?php namespace app\index\contro

  • 我正在向webapi控制器发送多部分数据。如何阅读方法中的内容?

  • 我需要实现一个RESTendpoint,它接收我使用的多部分/表单数据: Spring防尘套 科特林 SpringMVC 提交包含以下部分的多部分表单: 部署名称------文本/普通 启用重复筛选------文本/普通 仅更改部署------文本/普通 部署源------文本/普通 租户id------文本/普通 *----应用程序/八位字节流 Rest控制器看起来是这样的: 对于所有有效的参数

  • 我收到第三方对我的laravel post API的请求,其中包含两个表单数据(ID、文件)和标题(内容类型多部分/表单数据) 在laravel控制器中,在

  • 是否可以使用数据上传包含其他数据(如描述等)的文件?我正在使用骨干.js在我的前端,我用它调用REST API(jQuery)。我不使用任何视图解析器,但我想以某种方式将我的文件传递给控制器,如下所示: 以便uploadItem存储: 但是我不会(也不能)把这个加到我的模型里。 当然,我也很感兴趣是否有可能有这样的控制器:

  • 我很难用PHP cURL发布到API。我觉得我已经尝试了每种组合。我的脚本正在连接,但问题在负载范围内。 这是根据文档所需的请求。 --85b890d4-4faf-4261-bcbb-187c4dddcbc6内容类型:application/vnd.emc。ax json;charset=utf-8内容配置:表单数据;名称=数据 --85b890d4-4faf-4261-bcb-187c4dddc