Я пытаюсь отправить PDF-файл из приложения NodeJS в приложение Java Spring. Что я хочу сделать: pdf преобразуется в поток с помощью fs.createReadStream (). Мое приложение java получает поток и передает его дальше по цепочке.
Это суть моего NodeJS
const pdf = fs.createReadStream(path.join(__dirname, "angreskjema.pdf"))
const res = await IVRattachmentCendNotificationRequest({
data: pdf,
fileName: "angreskjema.pdf",
});
вот самого HTTP-запроса:
module.exports = body => {
return {
method: 'POST',
uri: `http://localhost:9038/apigee/cendNotificationEmailAttachment`,
headers: {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
'Authorization': 'Basic ' + Buffer.from('username:password').toString('base64')
},
formData:{
File: body.data,
FileName: body.fileName
}
};
};
, а это код пружины java:
@PostMapping("/cendNotificationEmailAttachment")
public ResponseEntity<String> cendNotificationMailAttachment(@RequestBody @RequestParam("FileName") String fileName, @FormDataParam("File") InputStream file) {
CendEmailAttachmentRequest request = new CendEmailAttachmentRequest();
System.out.println("-----------"+file);
request.setData(file);
request.setFileName(fileName);
if(request.getData() == null) {
logger.error("wrong data");
return new ResponseEntity<String>("Check your request to make sure you have data",HttpStatus.BAD_REQUEST);
}
if(request.getFileName() == null) {
logger.error("wrong fileName=" + request.getFileName());
return new ResponseEntity<String>("Check your request to make sure you correct fileName",HttpStatus.BAD_REQUEST);
}
logger.info("cendNotification for mail attachment fileName = " + request.getFileName());
String token = tokenService.token();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = HttpUtil.createHeadersToken(token);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("File",file);
HttpEntity<MultiValueMap<String,Object>> entity = new HttpEntity<>(map, headers);
//ResponseEntity<String> exchange = restTemplate.exchange(cendApiUrl+"/attachment?FileName="+request.getFileName(), HttpMethod.POST, entity, String.class);
ResponseEntity<String> exchange = restTemplate.exchange(cendApiUrl+"/attachment?FileName="+request.getFileName(), HttpMethod.POST, entity, String.class);
logger.info("cend attachment response" + exchange.getBody());
return new ResponseEntity<String>(exchange.getBody(),exchange.getStatusCode());
}
Печать в начале метода выводит объект org. apache .catalina.connector.CoyoteInputStream, но он никогда не получает никаких данных. Когда я пытаюсь прочитать его с помощью .read (), он просто возвращает -1, и я обнаружил, что не имеет значения, что помещается в параметр «Файл» из проекта NodeJS. Итак, что-то происходит между сопоставлением объекта File от nodejs до java