69

ユーザーが文字列の内容をシステム上のファイルに保存できるように、ブラウザに「ダイアログとして保存」を表示させるにはどうすればよいですか?

例えば:

var myString = "my string with some stuff";
save_to_filesystem(myString,"myString.txt");

次のような結果になります。

例

4

6 に答える 6

40

誰かがまだ疑問に思っている場合に備えて...

私はこのようにしました:

<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a>

ソースを思い出せませんが、次のテクニック/機能を使用しています。

  1. html5ダウンロード属性
  2. データURI

参照が見つかりました:

http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/


編集:コメントから収集できるように、これはで機能しませ

  1. Internet Explorer(ただし、Edge v13以降では機能します)
  2. Opera Miniは

http://caniuse.com/#feat=download

于 2014-03-20T10:54:46.407 に答える
17

ネイティブファイルシステムAPIと呼ばれる新しい仕様があり、次のようにこれを適切に行うことができます。

const result = await window.chooseFileSystemEntries({ type: "save-file" });

ここにデモがありますが、オリジントライアルを使用しているため、サインアップするか構成フラグを有効にしない限り、自分のWebサイトでは機能しない可能性があり、明らかにChromeでのみ機能します。Electronアプリを作成している場合は、これがオプションになる可能性があります。

于 2020-05-01T13:03:31.600 に答える
16

このためのjavascriptライブラリがあります。GithubのFileSaver.jsを参照してください。

ただし、saveAs()関数は純粋な文字列をブラウザに送信しないため、次のように変換する必要がありますblob

function data2blob(data, isBase64) {
  var chars = "";

  if (isBase64)
    chars = atob(data);
  else
    chars = data;

  var bytes = new Array(chars.length);
  for (var i = 0; i < chars.length; i++) {
    bytes[i] = chars.charCodeAt(i);
  }

  var blob = new Blob([new Uint8Array(bytes)]);
  return blob;
}

saveAs次に、次のようにBLOBを呼び出します。

var myString = "my string with some stuff";
saveAs( data2blob(myString), "myString.txt" );

もちろん、上記のjavascriptライブラリをWebページに含めることを忘れないでください。<script src=FileSaver.js>

于 2015-04-15T13:00:16.550 に答える
10

これは、HTML5saveAs関数のこのクロスブラウザjavascript実装を使用して可能です:https ://github.com/koffsyrup/FileSaver.js

テキストを保存するだけの場合、上記のスクリプトは、JSのみを使用して、すべてのブラウザー(IEのすべてのバージョンを含む)で機能します。

于 2015-05-28T13:17:25.260 に答える
9

javascriptのみを使用したソリューション

function saveFile(fileName,urlFile){
    let a = document.createElement("a");
    a.style = "display: none";
    document.body.appendChild(a);
    a.href = urlFile;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url);
    a.remove();
}

let textData = `El contenido del archivo
que sera descargado`;
let blobData = new Blob([textData], {type: "text/plain"});
let url = window.URL.createObjectURL(blobData);
//let url = "pathExample/localFile.png"; // LocalFileDownload
saveFile('archivo.txt',url);
于 2020-10-14T00:49:49.250 に答える
-7

execComandの使用:

<input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')">

次のリンク: execCommand

于 2015-04-01T22:24:35.590 に答える