2016-11-14 7 views
0

각도 2에서 파일을 다운로드하고 싶습니다. 제 문제는 Spring REST API에서 얻은 모든 파일이 파일 크기의 두 배입니다.Spring REST API를 통해 Angular 2로 다운로드 한 파일의 크기가 두 배입니다. 왜?

각도 발췌문 :

return this.authHttp.get(this.restAPI + '/downloadFile/' + fileId) 
     .toPromise() 
      .then(response => { 
       // var arrayBufferView = new Uint8Array(response.arrayBuffer()); 
       // var blob = new Blob([ arrayBufferView ], { type: response.headers.get("Content-Type") }); 
       // return blob; 

       return new Blob([response.arrayBuffer()], { type: response.headers.get("Content-Type")}) 
       }) 

      .catch(this.handleError); 

봄 REST 발췌문 :

@RequestMapping(value = "/downloadFile2/{fileId}", 
     method = RequestMethod.GET) 
public void downloadFileHandler2(@RequestHeader("Authorization") String token, 
     @PathVariable String fileId, HttpServletResponse response) throws IOException { 

    changeToCustomerDataBase(token); 

    File file = projectService.readFromDB(fileId); 

    response.addHeader("Content-Disposition", "attachment; filename="+file.getName()); 
    response.setContentType(Files.probeContentType(file.toPath())); 
    response.setContentLengthLong(file.length()); 

    FileInputStream fis = new FileInputStream(file); 
    int c; 
    while((c = fis.read()) > -1) { 
     response.getOutputStream().write(c);  
    } 

    response.flushBuffer(); 

    fis.close(); 
} 

파일, 데이터베이스에서 나오는 타르가 원래 크기를 가지고있다.

무엇이 잘못 되었나요? 내가 뭔가 잊었 니? 어떤 도움을 주셔서 감사합니다.

답변

0

어제 같은 문제가 있었지만 해결했습니다. 나 또는 다른 사람이 솔루션을 사용할 수 있기를 바랍니다. 귀하가 사용하는 authHttp.get의 요청에 responseType: ResponseContentType.Blob을 추가하십시오.

let requestOptions: RequestOptionsArgs = { 
     ..., 
     responseType: ResponseContentType.Blob 
}; 
. 
. 
. 
return this.http.request(path, requestOptions); 

그리고 대신 일을 나를 위해 new Blob([response.arrayBuffer()], { type: response.headers.get("Content-Type")})

response.blob()를 사용합니다. 나는 그것이 너를 돕기를 희망한다.