2017-12-20 18 views
0

申し訳ありませんこれについて別の投稿がありましたら、私はそれを見つけることができず、それは私を狂っています。角4ファイルのダウンロード(Internet Explorer 11)

バイト配列の形式でファイルを返すWebサービスを作成しましたが、正常に動作します。その後、

私は言及されたwebserviceを呼び出し、得られたファイルをダウンロードしようとするAngular 4サイトを開発しています。だから私は次のコードを思いついた:

downloadFile() { 
    let theFile; 
    this.http.get(FILE_DOWNLOAD_ENDPOINT, { responseType: 'blob' }) 
    .subscribe(data => { 
     theFile = new Blob([data], { type: 'application/octet-stream' }); 
     let url = window.URL.createObjectURL(theFile); 
     console.log(url); 
     const link = document.createElement('a'); 
     link.href = url; 
     link.download = 'file.pdf'; 
     console.log(link); 
     link.click(); 
    }, 
    error => { 
     console.log(error); 
    }, 
    () => console.log('File download completed.')); 
} 

このコードは、Chromeを使用して期待どおりに動作しますが、Internet Explorerはファイルをブラウザにダウンロードしません。私が作成したリンク要素が異なっていることがわかりますconsole.log()

ありがとう:

誰かが私を助けることができますか?ありがとう、事前にたくさん!

答えて

1

私は私のアプリのために同じ機能を実装しなければならなかったと私は、このライブラリを使用:File-Saver

それは便利な静か来ています。

+0

お返事ありがとうございます。私はそれについて聞いたが、私はそれ以上の依存関係なくそれをやろうとしていた。 – Nemezih

+0

これは大きなライブラリではなく、プロジェクトにコードをコピーしてコピーすることもできます。 –

0

最後に、私はこれを同様に見つけたpost。私は私の機能を変更し、今(それはChromeとIE11の両方で、今完璧に動作します)次のようになります。

downloadFile() { 
    let theFile; 
    this.http.get(FILE_DOWNLOAD_ENDPOINT, { responseType: 'blob' }) 
    .subscribe(data => { 
     theFile = new Blob([data], { type: 'application/octet-stream' }); 
     if (window.navigator && window.navigator.msSaveOrOpenBlob) { 
     window.navigator.msSaveOrOpenBlob(theFile, 'file.pdf'); 
     } else { 
     const url = window.URL.createObjectURL(theFile); 
     window.open(url); 
     const link = document.createElement('a'); 
     link.href = url; 
     link.download = 'file.pdf'; 
     link.click(); 
     } 
    }, 
    error => { 
     console.log(error); 
    }, 
    () => console.log('File download completed.')); 
} 

ありがとうございました!

関連する問題