将inputStream 转换成outputStream 返回给前端
//preserverUrl = "http://localhost:7223/word2pdf/convertPdf2";
PdfQuery pdfQuery = new PdfQuery(bytes, query.getType(), query.getFileId());
// log.info("pdfQuery:"+ JSON.toJSONString(pdfQuery));
ResponseEntity<org.springframework.core.io.Resource> pdfQueryResponseEntity = restTemplate.postForEntity(preserverUrl, pdfQuery, org.springframework.core.io.Resource.class);
InputStream inputStream1 = Objects.requireNonNull(pdfQueryResponseEntity.getBody()).getInputStream();
byte[] bytes1 = IOUtils.toByteArray(inputStream1);
log.info("转换文件字节数大小:"+bytes1.length);
response.getOutputStream().write(bytes1);
上面这种写法在某些浏览器发送的请求并不适配报404错误,通过日志看到已经获取到文件流在最后一步转换时出错
改进代码如下
//preserverUrl = "http://localhost:7223/word2pdf/convertPdf2";
PdfQuery pdfQuery = new PdfQuery(bytes, query.getType(), query.getFileId());
// log.info("pdfQuery:"+ JSON.toJSONString(pdfQuery));
ResponseEntity<org.springframework.core.io.Resource> pdfQueryResponseEntity = restTemplate.postForEntity(preserverUrl, pdfQuery, org.springframework.core.io.Resource.class);
InputStream inputStream1 = Objects.requireNonNull(pdfQueryResponseEntity.getBody()).getInputStream();
byte[] bytes1 = IOUtils.toByteArray(inputStream1);
log.info("转换文件字节数大小:"+bytes1.length);
// ServletOutputStream outputStream = response.getOutputStream();
// 清空response
response.reset();
// 设置response的Header
// response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO8859-1"));
response.addHeader("Content-Length", "" + bytes1.length);
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(bytes1);
toClient.flush();
toClient.close();
使用 BufferedOutputStream 包裹 返回即可解决
调用的接口如下
@PostMapping("/convertPdf2")
public void replayPdf2(HttpServletResponse httpServletResponse, @RequestBody PdfQuery pdfQuery) throws IOException {
String type = pdfQuery.getType();
if ("".equals(type) || type == null) {
type = "docx";
}
InputStream inputStream = new ByteArrayInputStream(pdfQuery.getFile());
try {
documentConverter.convert(inputStream).as(DefaultDocumentFormatRegistry.getInstance().getFormatByExtension(type))
.to(httpServletResponse.getOutputStream())
.as(DefaultDocumentFormatRegistry.PDF)
.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}