2017-05-23 16 views
13

私はローカルのインブラウザデータベースを使用してデータを保存しています。しかし、私はユーザーにそのデータをCSVにエクスポートする機能を与えたいと思っています。多くのコンテンツを含むローカルファイルのダウンロード

私はデータURLで解決策を見つけました - データでURLを準備してください。しかし私の場合、これはページ(リンク)がレンダリングされるたびに生成される> 1MBのデータです。 JavaScriptからファイルのダウンロードを生成できる代替ソリューションはありますか?コンテンツを前もって準備する必要はありません。ユーザーが実際にリンクをクリックしたときだけです。

私が自分のアプリケーションを構築するように反応する使用しています重要な場合..

+0

...? – CBroe

+0

もし私が正しく理解したら、ユーザーが別のボタンをクリックしたときにdata-urlでアンカーを生成することを提案していますか? JSを実際にクリックして起動しますか? – kubal5003

+1

私は単純にデータURIを 'location.href'に最初に割り当てようとしています。ブラウザがあなたにそれをさせるかどうかを見てみましょう。 – CBroe

答えて

13

はブロブを試してみてください。

(いや、ないようなもの)

demo

var blob = new Blob(["CSV DATA HERE"], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
open(url); 

CSVにJSONに変換する必要がありますか?

demo

https://stackoverflow.com/a/14966131/6560716

var data = [["name1", "city1", "some other info"], ["name2", "city2", "more info"]]; 
var csvContent = ""; 
data.forEach(function(infoArray, index){ 
    dataString = infoArray.join(","); 
    csvContent += index < data.length ? dataString+ "\n" : dataString; 
}); 
var blob = new Blob([csvContent], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
open(url); 

ファイルの名前を持っている必要がありますか?

demo

var blob = new Blob(["CSV DATA HERE"], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
var link = document.createElement("a"); 
link.setAttribute("href", url); 
link.setAttribute("download", "filename.csv"); 
document.body.appendChild(link); 
link.click(); 

ファイル名とJSON?正確に(私はあなたが既に持っていると仮定している?)準備-先行ソリューションを変換するだけで、多かれ少なかれを行い1と同じことに伴う問題である(?)クリック/オンデマンドで

demo

var data = [["name1", "city1", "some other info"], ["name2", "city2", "more info"]]; 
var csvContent = ""; 
data.forEach(function(infoArray, index){ 
    dataString = infoArray.join(","); 
    csvContent += index < data.length ? dataString+ "\n" : dataString; 
}); 
var blob = new Blob([csvContent], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
var link = document.createElement("a"); 
link.setAttribute("href", url); 
link.setAttribute("download", "filename.csv"); 
document.body.appendChild(link); 
link.click(); 
+2

filesaver.jsライブラリはhttps://github.com/eligrey/FileSaver.jsのためにたくさんのことをしていますが、レポのデモは少し壊れていますが、Iveはここでそれを複製しています。https://codepen.io/anon/pen/rwVWZQ –

関連する問題