收到的文件比发送的文件大
The received file is larger then the sent file
这是发送文件的代码:
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);
}
接收到的文件大小为8546字节。发送的文件大小为 6408 字节。即使编码有问题,接收到的文件大小应该是一样的,对吧?接收到的文件的内部看起来像两页随机字符,"UEsDBBQACAgIANqVt0YAAAAAAAAAAAAA" <- 像这样。
在发送响应之前,我尝试将从 my_file.docx 读取的字节数组写入本地磁盘上的一个文件,但它工作正常。
我也尝试设置我正在发送的 header 的 ContentLength,但它产生相同的结果 - 收到的文件内容错误,即使大小正确。
知道额外的 2Kb 是从哪里来的吗?我该如何解决这个错误?
目前还不清楚到底是什么在发送文件,但它是以 base64 格式传输的——这就是为什么它的大小是原始文件大小的 4/3。
我很确定如果您 运行 通过 base64 解码器接收到的文件,您将获得原始数据。看看 headers,我想您会发现其中提到的 base64。
这可能会提示您如何在 不使用 base64 的情况下 发送文件 - 可能是您正在使用的框架中默认为 base64 的内容,您可以覆盖它以二进制形式发送数据。
这是发送文件的代码:
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);
}
接收到的文件大小为8546字节。发送的文件大小为 6408 字节。即使编码有问题,接收到的文件大小应该是一样的,对吧?接收到的文件的内部看起来像两页随机字符,"UEsDBBQACAgIANqVt0YAAAAAAAAAAAAA" <- 像这样。
在发送响应之前,我尝试将从 my_file.docx 读取的字节数组写入本地磁盘上的一个文件,但它工作正常。
我也尝试设置我正在发送的 header 的 ContentLength,但它产生相同的结果 - 收到的文件内容错误,即使大小正确。
知道额外的 2Kb 是从哪里来的吗?我该如何解决这个错误?
目前还不清楚到底是什么在发送文件,但它是以 base64 格式传输的——这就是为什么它的大小是原始文件大小的 4/3。
我很确定如果您 运行 通过 base64 解码器接收到的文件,您将获得原始数据。看看 headers,我想您会发现其中提到的 base64。
这可能会提示您如何在 不使用 base64 的情况下 发送文件 - 可能是您正在使用的框架中默认为 base64 的内容,您可以覆盖它以二进制形式发送数据。