15

文字列からテキストファイルを作成したい。現在、配列を取得して文字列にする関数を使用しており、その文字列を使用して、ユーザーがダウンロードするローカルテキストファイルを作成したいと考えています。私はこの方法を使ってみました

   function createFile(){ //creates a file using the fileLIST list 
    var output= 'Name \t Status\n'+ fileLIST[0][0].name+'\t'+fileLIST[0][1]+'\n';
    var Previous = fileLIST[0];
    for (var i=1; i<fileLIST.length; i++)
        if (fileLIST[i][1] =='none' || fileLIST[i][1] == Previous[1])
            continue
        else {
            Previous = fileLIST[i]
            output = output + fileLIST[i][0].name +'\t'+fileLIST[i][1] + '\n';}

    window.open("data:text/json;charset=utf-8," + escape(output));//should create file
    display();  }

ブラウザとしてクロムを使用しています。また、JSまたはHTML5の回答を希望します。

前もって感謝します

4

4 に答える 4

30

objectを JSON 文字列に変換します。

var json_string = JSON.stringify(object, undefined, 2);

ノート:

  1. すでに文字列がある場合は、上記の手順をスキップしてください。
  2. 適切にフォーマットしたくない場合は、, undefined, 2.

ダウンロード リンクを作成してクリックします。

var link = document.createElement('a');
link.download = 'data.json';
var blob = new Blob([json_string], {type: 'text/plain'});
link.href = window.URL.createObjectURL(blob);
link.click();
于 2015-02-10T01:42:25.707 に答える
4

代わりにこのコードを使用することになりました。ファイルの URL をダウンロードするためのリンクを作成します。

     window.URL = window.webkitURL || window.URL;
    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||       window.MozBlobBuilder;
    file = new WebKitBlobBuilder();
    file.append(output); 
    var a = document.getElementById("downloadFile");
    a.hidden = '';
    a.href = window.URL.createObjectURL(file.getBlob('text/plain'));
    a.download = 'filename.txt';
    a.textContent = 'Download file!';
}

また、この方法ではウェブサイトへの追加が少なくなり、接続が遅い場合でも軽量なウェブサイトになります。私のhtmlには、これが追加される空のdivがあります。

   <div class ='paginationLIST' id='pagination'></div>
于 2012-05-22T18:38:41.080 に答える
0

「よりクリーンな方法」にするiframe代わりに、非表示を使用することをお勧めしますwindow.open

ダウンロードを強制することtext/octet-streamではないと思います。text/json私の知る限り、この方法でファイル名を設定することはできません。

ただし、Chrome(18歳以上だと思います)には、URLに使用するとともにファイルの名前を指定できるタグのdownload属性があります。<a>blob:

于 2012-05-18T15:20:44.500 に答える