我使用了以下代码来使用multipart/form-data。但是在那里我不能为文件指定content-type。如何在spring中传递content-type,filename,filename内容?
HttpHeaders header = new HttpHeaders();
header.add("Token", "_45378ffb-e366-45ec-9ac4-eb968c57aee3"); header.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> fileMap = new LinkedMultiValueMap<>();
fileMap.add(filename, msg.getBytes());
fileMap.add("OrderRequest", message);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(fileMap, header);
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity,String.class);我使用MultiValueMap来添加文件名和它的内容,并且我不能传递文件的内容类型。当执行时,我收到400个错误请求。你能帮上忙吗?
我之前已经尝试过了,这里也得到了400个坏的requests.Need帮助。
HttpHeaders headers = new HttpHeaders();
headers.add("token", "_fd470451-cb5d-4fa2-8e18-0bf8a7a92d04");
headers.add("Content-Type", "multipart/form-data; boundary=\"---boundary\"");
MultiValueMap<String, Object> fileMap = new LinkedMultiValueMap<>();
ContentDisposition contentDisposition = ContentDisposition.builder("form-data").name(filename).filename(filename).build();
fileMap.add(contentDisposition.toString() + "\n" + " Content-Type: application/octet-stream", msg);
ContentDisposition contentDisposition1 = ContentDisposition.builder("form-data").name("OrderRequest").filename("OrderRequest").build();
fileMap.add(contentDisposition1.toString(), message);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(fileMap,headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);发布于 2019-07-31 14:19:03
准备文件零件
HttpHeaders filePartHeaders = new HttpHeaders();
filePartHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
HttpEntity filePart = new HttpEntity<>(new ByteArrayResource(msg.getBytes()) {
@Override
public String getFilename() {
return filename;
}
}, filePartHeaders);然后准备消息部分
HttpHeaders messagePartHeaders = new HttpHeaders();
messagePartHeaders.setContentType(MediaType.TEXT_PLAIN);
HttpEntity messagePart = new HttpEntity<>(message, messagePartHeaders);然后将各个部分组合成一个多部分请求实体
HttpHeaders header = new HttpHeaders();
header.add("Token", "_45378ffb-e366-45ec-9ac4-eb968c57aee3");
header.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> multiMap = new LinkedMultiValueMap<>();
multiMap.add(filename, filePart);
multiMap.add("OrderRequest", messagePart);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multiMap, header);并最终执行请求
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);发布于 2019-07-31 18:10:39
谢谢你,我试过了,但还是收到了400个错误请求。在这里,我使用了tcpdump,得到的响应如下:
POST XXXXXXXXXXXXXXXXXXXXX
Accept: text/plain, application/json, application/*+json, */*
Content-Type: multipart/form-data;charset=UTF-8;boundary=XXXXXXXXXXXXXXXX
Token: XXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: Java/1.8.0_201
Host: XXXXXXXXXXXXXXXXXXXXXXXXXX
Connection: keep-alive
Content-Length: 1003
�bA]fG
�k�?A�--XXXXXXXXXXXXXXXXXXXX
Content-Disposition: form-data; name=filename; filename=fileName
Content-Type: application/octet-stream
Content-Length: 511
MSH|^~\&|GHHHH v2012007|HL93765411|GHH|DHM|20170725121244||ORM^O01|ghjk09876|P|2.3.1|6||AL|NE|AU|||
PID|1|||11057^^^GPC Test Practice^MR^GPC Test Practice|XXX^XXX^^^jjj^^L||19920321|F|||188 HEIGHTS DR^^ROBINA^QLD^4226^^C|||^ORN^PH^^^^04
01817188^||||||||||||||||
PV1|1|O||||||2121331W^BHAR^NAV^^^MR.^^^AUSHICPR|2121331W^BHAR^NAV^^^MR.^^^AUSHICPR|||||||||||
ORC|NW|10188-1||10188||||||||^Admin^Mr.
OBR|1|10188-1||T001^Histopathology^LN|||201707251212||||L|||||^Admin^Mr.||||||||LAB
BLG||F
--XXXXXXXXXXXXXXXXXX
Content-Disposition: form-data; name="FileName1"
Content-Type: application/json
Content-Length: 133
{"client_software_version":"XXX","batch_id":"XXXXX","order_files_sent":["fileName"],"client_software_name":"XXXXX"}
--XXXXXXXXXXXX--下面的响应是rest模板的预期响应。这里需要帮助。它对下面的tcpdump响应和我们没有使用rest模板的响应是有效的:
POST XXXXXXXXXXXXXXXXX
token: XXXXXXXXXXXXXXXXXXXXXXXXXX
content-type: multipart/form-data; boundary="---boundary"
Content-Length: 940
Host: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_201)
Accept-Encoding: gzip,deflate
-----boundary
Content-Disposition: form-data; name="fileName"; filename="fileName"
Content-Type: application/octet-stream
MSH|^~\&|GHHHH v2012007|HL93765411|GHH|DHM|20170725121244||ORM^O01|ghjk09876|P|2.3.1|6||AL|NE|AU|||
PID|1|||11057^^^GPC Test Practice^MR^GPC Test Practice|XXX^XXX^^^jjj^^L||19920321|F|||188 HEIGHTS DR^^ROBINA^QLD^4226^^C|||^ORN^PH^^^^04
01817188^||||||||||||||||
PV1|1|O||||||2121331W^BHAR^NAV^^^MR.^^^AUSHICPR|2121331W^BHAR^NAV^^^MR.^^^AUSHICPR|||||||||||
ORC|NW|10188-1||10188||||||||^Admin^Mr.
OBR|1|10188-1||T001^Histopathology^LN|||201707251212||||L|||||^Admin^Mr.||||||||LAB
BLG||F
-----boundary
Content-Disposition: form-data; name="filename1"; filename="filename1"
Content-Type: application/json; charset=UTF-8
{"client_software_version":"XXX","batch_id":"XXXXX","order_files_sent":["fileName"],"client_software_name":"XXXXX"}
-----boundary--https://stackoverflow.com/questions/57268760
复制相似问题