2017-04-17 1 views
3

Reactjs에서 Spring REST 끝점을 호출하여 Excel 파일을 다운로드하려고하는데 파일이 손상되어 실행 중입니다.React Excel 파일 다운로드가 손상됨

전화 반작용 ...

getFile(){ 
    axios.get('get/download') 
     .then((response) => { 
      var blob = new Blob([response.data], {type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); 
      filesaver.saveAs(blob, "excel.xlsx"); 
     }); 
} 

봄 컨트롤러 ....

@RequestMapping(value = "/download", method = RequestMethod.GET) 
    public void downloadExcelFile(final HttpServletResponse response) throws IOException { 
     response.setHeader("Content-Encoding", "UTF-8"); 
     response.setHeader("Content-Disposition", "attachment; filename="file.xlsx"); 
     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 

     final File xls = service.createExcelFile(response); 

     final FileInputStream in = new FileInputStream(xls); 
     final OutputStream out = response.getOutputStream(); 

     final byte[] buffer = new byte[8192]; 
     int length; 

     while ((length = in.read(buffer)) > 0) { 
      out.write(buffer, 0, length); 
     } 
     in.close(); 
     out.close(); 
    } 

서비스 ... 나는 위의 코드를 실행하면

public File createExcelFile(final HttpServletResponse response) { 
    XSSFWorkbook xssfWorkbook = null; 
    final File xls = new File("excel.xlsx"); 
     try { 
      final FileOutputStream fos = new FileOutputStream(xls); 

      xssfWorkbook = new XSSFWorkbook(); 
      //setup excel file... 
      xssfWorkbook.write(fos); 
      xssfWorkbook.close(); 
     } 
     catch (final Exception e) { 
      LOGGER.error(String.format("Something went wrong")); 
     } 
    return xls; 
} 

내가 얻을 엑셀 파일 괜찮아.하지만 response.data보고 보면 ...

"PKs��J_rels/.rels���j�0��}↵�{㴃1F�^Ơ�2��l%1I,c�[� 

내가 열리는 파일을 열려고하면 읽을 수없는 데이터 때문에 파일을 열 수 없습니다. 파일이 서버에 생성 열면 어떤 아이디어가

건배를 환영

괜찮

당신은 단지 Axios의 요청에 응답 유형을 추가 할 필요가
+0

'새로운 Blob ([응답],?) (나는 w 인코딩 된 데이터가 '데이터'필드에 있음) –

+0

유사한 문제가 발생했습니다. 이것에 행운이 있니? –

답변

2

: 기능 다운로드 다음 내 응용 프로그램에서

responseType: 'arraybuffer' 

파일을 엑셀 :

function exportIssues() { 
    axios.get('/issues/export', { responseType: 'arraybuffer' }) 
    .then((response) => { 
     var blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); 
     fileSaver.saveAs(blob, 'fixi.xlsx'); 
    }); 
} 
관련 문제