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

如何在使用RestTemplate时为多部分上传中的文件设置内容类型(来自rest客户端)

唐俊爽
2023-03-14
         MultiValueMap<String, Object parts = new LinkedMultiValueMap<String,
         Object(); parts.add("subject", "some info"); 
         ByteArrayResource xmlFile = new    ByteArrayResource(stringWithXMLcontent.getBytes("UTF-8")){
                 @Override
                 public String getFilename(){
                     return documentName;
                 }             
             };

     parts.add("attachment", xmlFile);

//sending the request using RestTemplate template;, the request is successfull 
String result = template.postForObject(getRestURI(), httpEntity,String.class);      
//but the content-type of file is 'application/octet-stream'
    Content-Type:
    multipart/form-data;boundary=gbTw7ZJbcdbHIeCRqdX81DVTFfA-oteHHEqgmlz
    User-Agent: Java/1.7.0_67 Host: some.host Connection: keep-alive
    Content-Length: 202866

    --gbTw7ZJbcdbHIeCRqdX81DVTFfA-oteHHEqgmlz Content-Disposition: form-data;    name="subject" Content-Type: text/plain;charset=ISO-8859-1
    Content-Length: 19

    some info

    --gbTw7ZJbcdbHIeCRqdX81DVTFfA-oteHHEqgmlz Content-Disposition: form-data;   name="attachment"; filename="filename.xml" Content-Type:
    application/octet-stream Content-Length: 201402

    ....xml file contents here ..

文件的内容类型被生成为'application/octet-stream',我希望它是'application/xml',如何设置文件的内容类型?

共有1个答案

韩弘阔
2023-03-14

从这个链接中得到提示后,我想出了解决方案:

用spring for android实现压缩jpeg字节数组的多部分post请求

解决方案是将ByteArrayResource放在具有所需头的HttpEntity中,并将HttpEntity添加到Multivaluemap(而不是添加ByteArrayResource本身)

Resource xmlFile = new ByteArrayResource(stringWithXMLcontent.getBytes("UTF-8")){
            @Override
            public String getFilename(){
                return documentName;
            }
        };
        HttpHeaders xmlHeaders = new HttpHeaders();
        xmlHeaders.setContentType(MediaType.APPLICATION_XML);
        HttpEntity<Resource> xmlEntity = new HttpEntity<Resource>(xmlFile, xmlHeaders);
        parts.add("attachment", xmlEntity);
 类似资料:
  • 我的示例Jersey客户端代码是 我一直在尝试这个代码变体,从上一个星期以来,它是不工作的。在这方面的任何帮助都是高度赞赏的。

  • 我正在尝试使用Faign client上传多个多部分文件,但我无法这样做。 经过一些研究,文件上传使用Faign-多部分/表单数据 文件上传spring云虚拟客户端 数组Multipart[]文件上传使用FIGN客户端 客户端: 我正在尝试访问的模块: 上面的工程罚款为一个单一的Multipart文件,但它显示以下错误为多个文件: Servlet.service()为servlet[调度Servl

  • 我想通过调用rest web服务上传文件。此web服务需要MultipartFile。 我在这里读到我可以做到这一点:使用Spring Rest模板Spring Web MVC上传多部分文件 这是我的代码: 杰克逊尝试以JSON形式序列化该文件,但它失败了,并出现以下错误: 如何禁用文件的json序列化?

  • 我试图在Spring Boot中使用RestTemplate来模拟这个请求 这是我的代码: 上面的请求抛出一个HttpClientErrorException,这就是响应体的样子 {“错误”:{“消息”:“需要多部分/表单数据;边界=<..>内容,但获得多部分/表单数据;边界=X6G0xWVXDZX4N8PYNU8IHGANGG4TWJ3DGMaryDS。”,“代码”:“错误内容类型”}} 我也尝

  • 我想上传一个图像到文件系统。所以我用spring-boot上传多部分文件。我还使用Advance Rest Client(Chrome)工具来Multi-part文件。但即使我没有指定任何内容类型org.apache.tomcat.util.http.fileupload,我也面临一个错误。FileUploadException:请求被拒绝,因为找不到多部分边界。 这是我的Rest控制器代码, 屏