是否有可能只使用JavaScript将数据写入文件?

我想使用JavaScript将数据写入现有的文件。 我不想在控制台上打印它。 我想实际上写数据到abc.txt 。 我读了很多回答的问题,但他们在控制台上打印的每一个地方。 在某个地方,他们已经提供了代码,但不工作。 所以,请任何人可以帮助我如何实际写入数据文件。

我提到的代码,但它不工作:它给错误:

  Uncaught TypeError: Illegal constructor 

在铬和

  SecurityError: The operation is insecure. 

在Mozilla上

 var f = "sometextfile.txt"; writeTextFile(f, "Spoon") writeTextFile(f, "Cheese monkey") writeTextFile(f, "Onion") function writeTextFile(afilename, output) { var txtFile =new File(afilename); txtFile.writeln(output); txtFile.close(); } 

那么我们是否可以使用Javascript或NOT实际上将数据写入文件? 请提前帮助我

对此有一些build议 –

  1. 如果您正在尝试在客户端计算机上编写文件,则无法以任何跨浏览器的方式执行此操作。 IE确实有方法来启用“可信”应用程序来使用ActiveX对象来读/写文件。
  2. 如果您试图将它保存在您的服务器上,那么只需将文本数据传递到您的服务器,并使用某种服务器端语言执行文件编写代码。
  3. 为了在客户端存储相当小的信息,你可以去cookies。
  4. 使用本地存储的HTML5 API。

您可以使用BlobURL.createObjectURL在浏览器中创build文件。 所有最近的浏览器都支持这个 。

您不能直接保存您创build的文件,因为这会导致严重的安全问题,但您可以将其作为用户的下载链接提供。 您可以在支持下载属性的浏览器中通过链接的download属性build议文件名。 与其他任何下载一样,下载文件的用户将对文件名有最后的说明。

 var textFile = null, makeTextFile = function (text) { var data = new Blob([text], {type: 'text/plain'}); // If we are replacing a previously generated file we need to // manually revoke the object URL to avoid memory leaks. if (textFile !== null) { window.URL.revokeObjectURL(textFile); } textFile = window.URL.createObjectURL(data); // returns a URL you can use as a href return textFile; }; 

这是一个使用这种技术从textarea保存任意文本的例子 。

如果你想立即开始下载,而不是要求用户点击一个链接,你可以使用鼠标事件模拟鼠标点击链接LifeCube的答案 。 我创build了一个使用这种技术的更新示例 。

  var create = document.getElementById('create'), textbox = document.getElementById('textbox'); create.addEventListener('click', function () { var link = document.createElement('a'); link.setAttribute('download', 'info.txt'); link.href = makeTextFile(textbox.value); document.body.appendChild(link); // wait for the link to be added to the document window.requestAnimationFrame(function () { var event = new MouseEvent('click'); link.dispatchEvent(event); document.body.removeChild(link); }); }, false); 

如果你正在谈论JavaScript浏览器,出于安全原因,你不能直接写数据到本地文件。 HTML 5新的API只能让你读取文件。

但如果你想写数据,并使用户下载为本地文件。 以下代码工作:

  function download(strData, strFileName, strMimeType) { var D = document, A = arguments, a = D.createElement("a"), d = A[0], n = A[1], t = A[2] || "text/plain"; //build download link: a.href = "data:" + strMimeType + "charset=utf-8," + escape(strData); if (window.MSBlobBuilder) { // IE10 var bb = new MSBlobBuilder(); bb.append(strData); return navigator.msSaveBlob(bb, strFileName); } /* end if(window.MSBlobBuilder) */ if ('download' in a) { //FF20, CH19 a.setAttribute("download", n); a.innerHTML = "downloading..."; D.body.appendChild(a); setTimeout(function() { var e = D.createEvent("MouseEvents"); e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); D.body.removeChild(a); }, 66); return true; }; /* end if('download' in a) */ //do iframe dataURL download: (older W3) var f = D.createElement("iframe"); D.body.appendChild(f); f.src = "data:" + (A[2] ? A[2] : "application/octet-stream") + (window.btoa ? ";base64" : "") + "," + (window.btoa ? window.btoa : escape)(strData); setTimeout(function() { D.body.removeChild(f); }, 333); return true; } 

使用它:

download('the content of the file', 'filename.txt', 'text/plain');

以上答案是有用的,但是, 我发现代码 ,可以帮助您直接下载button点击文本文件。 在这个代码中,你也可以根据需要更改filename 。 这是HTML5的纯JavaScriptfunction。 为我工作!

 function saveTextAsFile() { var textToWrite = document.getElementById("inputTextToSave").value; var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'}); var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value; var downloadLink = document.createElement("a"); downloadLink.download = fileNameToSaveAs; downloadLink.innerHTML = "Download File"; if (window.webkitURL != null) { // Chrome allows the link to be clicked // without actually adding it to the DOM. downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); } else { // Firefox requires the link to be added to the DOM // before it can be clicked. downloadLink.href = window.URL.createObjectURL(textFileAsBlob); downloadLink.onclick = destroyClickedElement; downloadLink.style.display = "none"; document.body.appendChild(downloadLink); } downloadLink.click(); } 

使用上面的user @ useless-code( https://stackoverflow.com/a/21016088/327386 )的代码生成文件。 如果要自动下载文件, textFile刚刚生成的textFile传递给此函数:

 var downloadFile = function downloadURL(url) { var hiddenIFrameID = 'hiddenDownloader', iframe = document.getElementById(hiddenIFrameID); if (iframe === null) { iframe = document.createElement('iframe'); iframe.id = hiddenIFrameID; iframe.style.display = 'none'; document.body.appendChild(iframe); } iframe.src = url; }