2017-03-23 4 views
2

WebApi 2 응용 프로그램에서 AngularJS 클라이언트로 보내는 PDF 파일이 있습니다.PDF의 UTF-8 문자가 아님 Javascript Blob

this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`) 
    .then((response: ng.IHttpPromiseCallbackArg<any>) => { 
     var file = new Blob([response.data], { type: 'application/pdf' }); 
     saveAs(file, 'my.pdf'); 
    }); 

나는이 내가 PDF에 대한 액세스 (이 통해 추가 권한을 부여하기 위해 베어러 토큰을 사용할 수 있도록이다 않는 이유 : 나는 (타이프에서) 다음과 같이 클라이언트에서 파일을 저장 file-saver를 사용 인터셉터). 이 작업은 PDF 파일에 UTF8이 아닌 문자가 포함 된 경우를 제외하고 작동합니다. 후자의 경우에도 파일은 계속 다운로드되지만 열 때 아무 것도 표시되지 않습니다. 파일 열기 UTF8이 아닌 문자가 □ 문자로 바뀝니다. JavaScript에서 디버거의 문자열 값 response.data을 검사 할 때 그 문자는 represented로 표시됩니다. 필자는 파일이 JavaScript의 문자열에서 작성 되었기 때문에 내가 무엇을해도 JavaScript에서 UTF8이 아닌 문자로 파일을 올바르게 저장할 수 없다고 가정합니다.

답변

4

문자는 Unicode Replacement Character \uFFFD이며 UTF-8 파서가 불법 UTF-8을 구문 분석하려고 할 때 삽입됩니다.

PDF 파일은 UTF-8 문자열이 아닙니다. 이진 파일입니다. 자세한 내용

var config = {responseType: 'blob'}; 

    this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`, config) 
    .then((response: ng.IHttpPromiseCallbackArg<any>) => { 
     //var file = new Blob([response.data], { type: 'application/pdf' }); 
     var file = response.data; 
     saveAs(file, 'my.pdf'); 
    }); 

,

+0

조지. 그것은 대접을했습니다! – Matt