2017-06-14 7 views
2

私は自分のアプリケーションにnode.jsとangular.jsを使用しています.BlobとfileSaver.jsを使ってブラウザからファイルをダウンロードしようとしています。角度ファイルセーバーを使用してあらゆる種類のファイルをダウンロードする方法はありますか?

私は、私のアプリの他のセクションでこれを使って、問題なくBlobオブジェクトを作成するときに正しいタイプを指定したテキストファイルとpdfファイルをダウンロードしましたが、現在のセクションではどのタイプのファイルもサポートする必要がありますそれが可能かどうかわからない。

たとえば、type:image/pngの有無にかかわらず画像ファイルをダウンロードしようとしましたが、結果が壊れた画像でした。テキストエディタでそのファイルを調べて元のファイルと比較すると、多くのバイトが変更されています。ここで

は、私が使用するコードスニペットです:

サーバー

fs.readFile(/* snipped file path */, function(err, data){ 
    if(err){ 
     /* handle error */ 
    } 
    else{ 
     res.send(data); 
    } 
}); 

クライアント

$http.get(/* endPoint URL */) 
    .success(function(result){ 
     var data = new Blob([result], {type: 'image/png'}); 
     FileSaver.saveAs(data, filename); 
    }); 

いくつかの質問:

  1. Blobの型を指定する必要がありますか?もしそうなら、それをサーバーで指定する必要がありますか(それを決定するのは苦痛です)?私は両端でそれをスキップできませんか?
  2. イメージテストでファイルが破損する原因は何ですか? content-typeヘッダーなどがありませんか?

答えて

0

あなたのGETリクエストに{contentType: 'arraybuffer'}を追加してみてくださいので、同様に、ブロブの定義からタイプを削除します。

$http.get(/* endPoint URL */, {contentType: 'arraybuffer'}) 
    .success(function(result){ 
     var data = new Blob([result]); 
     FileSaver.saveAs(data, filename); 
    }); 

を:

+1

感謝を(編集は、BLOBから冗長型定義を削除しました)!私が試したすべての種類のファイルに対して素晴らしい動作をします。また、Blobオブジェクトの作成時に型を指定する必要もありません。 – kfirz

関連する問題