2015-05-23 25 views
0

这是发送文件的代码:所接收的文件是较大的,然后发送的文件

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中读取的字节数组写入本地磁盘上的文件,并且工作正常。

我也尝试过我发送的头文件的setContentLength,但它会得到相同的结果 - 接收文件的内容错误,即使大小正确。

任何想法,其中2Kb是从哪里来的?我该如何解决这个错误?

回答

5

目前尚不清楚实际发送的文件是什么,但它是以base64的形式传输的 - 这就是为什么它是原始文件大小的4/3。

我敢肯定,如果您通过base64解码器运行接收到的文件,您将获得原始数据。看看头文件,我怀疑你会发现那里提到的base64。

这也许应该给你一个关于如何发送文件使用Base64暗示 - 这是默认大概为base64您使用的框架内,你可能可以重写它来发送数据刚刚二进制文件。