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

内容处理文件名可以用于Spring WebClient的多部分形式的文本字段吗?

龙毅
2023-03-14

使用Service Now API(例如)需要请求提供以下内容:

POST /api/now/attachment/upload HTTP/1.1
Host: somehost.testenv.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MadHyZrFTrZu0gW
cache-control: no-cache
Content-Disposition: form-data; name="table_name"

some_table

Content-Disposition: form-data; name="table_sys_id"

82c9aca7kljasdfkljhasdfec8dfdb61d961920

Content-Disposition: form-data; name="uploadFile"; filename="undefined"

Content-Type: file

------WebKitFormBoundary7MA4YWxkTrZu0gW—

以上是通过使用Postman并提供表单数据键值对生成的。

然而,根据定义内容处置的RFC摘要:https://www.rfc-editor.org/rfc/rfc2183.

Two values for this
header field are described in this memo; one for the ordinary linear
presentation of the body part, and another to facilitate the use of
mail to transfer files.

Spring Webflux中使用的内容配置类(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ContentDisposition.html)仅包含字符串“filename”的内部字段。

org.springframework.httpContentDisplace类是否缺少RFC-2183中关于标准值(主体部分的普通线性表示)的组件?

由Spring代码自动生成的HTTP请求如下:

POST /api/now/attachment/upload HTTP/1.1
user-agent: ReactorNetty/0.7.9.RELEASE
transfer-encoding: chunked
host: somehost.testenv.com
accept: */*
accept-encoding: gzip
Content-Type: multipart/form-data;boundary=o-0JsSvUdGo98NDHJSWTwjvgzlRSXsmJ98-pWQ;charset=UTF-8

这是生成上述HTTP请求的源代码:

MultipartBodyBuilder mbuilder = new MultipartBodyBuilder();
mbuilder.part("table_name", snConfig.getChangeRecordTableName());
mbuilder.part("table_sys_id", result.get(0).getSysId());
mbuilder.part("uploadFile", someFile);

return client.post()
    .uri(snConfig.getEndpointAttachmentUpload())
    .contentType(MediaType.MULTIPART_FORM_DATA)
    .syncBody(mbuilder.build())
    .retrieve()
    .bodyToMono(AttachmentUploadResult.class);

代码似乎将所有MultipartBodyBuilder组件存储到一个单一的多部分/表单数据中,这与工作HTTP请求的格式不同。

但是,即使手动提供Content-Displace标头,也只能创建一个名称/值对,其中值为“文件名”。

内容处置是否缺少功能?这在WebClient上可能吗?

共有1个答案

盛琪
2023-03-14

很长一段时间以来,WebClient似乎不支持这一点。

 类似资料:
  • 问题内容: 根据MySQL,一列可容纳65,535个字节。 因此,如果这是一个合理的边界,那么它实际上只能容纳大约32k UTF-8字符,对吗?还是这是“模糊的”界限之一,编写文档的人无法分辨字节中的字符,并且如果将其设置为类似内容,实际上将允许〜64k UTF-8字符? 问题答案: 一列最多可包含字节。 一个字符最多可以为3个字节。 所以…您的实际限制可以是字符。 有关更多信息,请参见手册:ht

  • 我是骆驼的新手。我将有一个文件处理与骆驼,但我还没有找到一个现成的解决方案,我的情况。我必须一起处理多个文件,以防它们存在。这些文件上载到特定文件夹时会有一些延迟(例如:我们有两个文件a.csv和b.csv,a.csv上载的时间比b.csv晚10秒,反之亦然)。此外,如果一个文件缺席超过特定的时间,我只需要处理一个文件。有谁能帮我选一个图案吗?据我所知,我可以使用camel过滤器来确保我们已经有了

  • 我想从Perl向REST API服务发出一个POST请求。作为POST表单参数,服务需要一个多部分编码的文件。 我写了上面的代码。但是显然REST服务器无法理解POST请求,因为我只将文件路径发送到REST服务,而不是多部分编码的文件内容。有人能告诉我如何使文件多部分编码并将其作为POST请求发送到REST服务,而REST服务期望多部分编码的文件作为表单参数吗? 作为补充说明,我实际上想编写与下面

  • 问题内容: 我使用HttpResponseMessage类作为AJAX调用的响应,该调用从服务返回JSON数据。从服务返回AJAX调用后暂停执行时,我看到此类包含一个Content属性,该属性的类型为System.Net.Http.StreamContent。 如果在浏览器中进行检查,我会看到成功进行了网络调用,并以JSON数据作为响应。我只是想知道为什么我无法在Visual Studio中看到返

  • 我使用angularjs 1.3.14 我有一个java REST服务生成一个xml文件,它的头是:“Content-Disposition”,“attachment;filename=yourfilename”; Java服务:

  • 我正在传递多部分文件与其他用户信息。无法将类型的属性值转换为属性嵌套异常为 下面的代码我已经试过了 控制器类 @RequestMapping(value=RestMappingURLS.user.saveUser,headers={“Content-Type=Multipart/Mixed”,“Content-Type=Multipart/Form-Data”})public RestRespon