2016-06-14 3 views
1

현재 FileReader를 사용하여 Chrome에서 작동하는 PDF를 열고 봅니다. 그러나 pdf가 Safari에서 열리고 다운로드 버튼을 클릭해도 아무런 변화가 없습니다. 문제는 내가 지금 당신과 나의 지식을 공유 할 수 있습니다 어디에 후Safari에서 pdlob blob url을 다운로드 할 수 없습니다.

var reader = new FileReader(); 
reader.onloadend = function(e) { 
    $window.location.href = reader.result; 
} 
reader.readAsDataURL(file); 
+0

나에게도 마찬가지입니다. @Tyler 솔루션을 찾았습니까? –

+0

@AbhishekPrakash IE가 특정 길이의 blob URL을 허용하지 않는다는 것을 알아 차렸으므로 서버 솔루션으로 전환했습니다. –

답변

1

비슷한 문제에 대한 작업을 하루 종일 소비하는 데, 나는 이해했다. 당신이 뭔가 너무 귀하의 페이지 URL 변경을 이미 열려있는 브라우저 탭 내부의 Blob 렌더링 할 때

기본적으로, 문제의이 종류가 생성됩니다

blob:http://localhost:8080/9bbeffe1-b0e8-485d-a8bd-3ae3ad9a0a51

것 PDF 파일을 필요에 대한 잘못된 절차 이 같은 :

var fileBlob = new Blob([response.data], {type: 'application/pdf'}); window.location.hfref = fileBlob;

왜이 작동합니까? 음, 페이지에서 렌더링 된 PDF를 볼 수 있으므로 pdf가 잘로드되었다는 생각에 빠질 수도 있습니다. 그러나 페이지를 새로 고치거나 컴퓨터에서 pdf를 다운로드하려고해도 작동하지 않습니다.

WTH? 처음에는 브라우저 주위를 돌고있는 일종의 검은 마법을 생각해 보았습니다. 그 다음에 문제를 발견했습니다. 파일은 존재하지 않지만 브라우저 내부에만 저장된 캐시입니다. 따라서 blob을 생성하고 생성 된 blob url을 가리 키도록 현재 탭을 리디렉션하면 캐시가 손실됩니다.

이제 모든 것이 의미가 있습니까?

  1. 당신은 서버 브라우저는
  2. 당신은
  3. 당신은 PDF를 볼 버퍼를 읽을 페이지의 URL을 가리키는 탭 내부하지만 동시에 버퍼를 저장
  4. 에 파일을 요청하면 버퍼 정보가 손실

유일한 당신과 함께 새 탭에서의 Blob의 URL을 여는 할 수 있다고 생각 :

window.open(fileBlob, '_blank');

문제가 해결되었습니다.