这是发送文件的代码:
byte[] data = FileUtils.readFileToByteArray(new File("my_file.docx"));
System.out.println(data.length); // prints 6408
ResponseEntity<byte[]> responseEntity = makeResponse(data, HttpStatus.OK, DOCX);
return responseEntity;
private <T> ResponseEntity<T> makeResponse(T responseParameter, HttpStatus httpStatus,
DocumentFormat documentFormat) {
HttpHeaders headers = new HttpHeaders();
String filename;
switch (documentFormat) {
case PDF:
headers.setContentType(MediaType.parseMediaType("application/pdf"));
filename = "output.pdf";
break;
case DOCX:
headers.setContentType(MediaType.parseMediaType("application/docx"));
filename = "output.docx";
break;
default:
throw new IllegalArgumentException(documentFormat.name() + "is not supported");
}
headers.setContentDispositionFormData(filename, filename);
return new ResponseEntity<>(responseParameter, headers, httpStatus);
}
Run Code Online (Sandbox Code Playgroud)
收到的文件大小为8546字节.发送的文件大小为6408字节.即使编码在某种程度上是错误的,接收的文件应该是相同的大小,对吧?接收文件的内部看起来像两个随机字符的两页,"UEsDBBQACAgIANqVt0YAAAAAAAAAAAAA"< - 像这样.
我尝试将我从my_file.docx读取的字节数组写入本地磁盘上的文件,然后再发送响应,它可以正常工作.
我也尝试setHtentLength我正在发送的标题,但它产生相同的结果 - 接收文件的内容错误,即使大小正确.
想知道额外的2Kb来自哪里?我该如何解决这个错误?