2015-05-23 16 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您使用的框架內,你可能可以重寫它來發送數據剛剛二進制文件。

相關問題