我想要上传的文件将始终是一个xml文件.我想将content-type设置为application / xml
这是我的代码:
这是我的代码:
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 / xml”
我如何设置文件的内容类型?
解决方法
从此链接中提取出来后,我找出了解决方案:
Making a multipart post request with compressed jpeg byte array with spring for android
解决方案是将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);