Как отправить PDF-файл из приложения NodeJS в Java Spring - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь отправить 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

...