Jar*_*red 167 javascript file-access
是否有使用JavaScript完成的本地文件操作?我正在寻找一种可以在没有安装空间的情况下完成的解决方案,例如需要AIR.
具体来说,我想从文件中读取内容并将这些内容写入另一个文件.在这一点上,我并不担心获得权限,只是假设我已经拥有这些文件的完全权限.
Hor*_*ter 157
只是对HTML5功能的更新http://www.html5rocks.com/en/tutorials/file/dndfiles/这篇优秀的文章将详细解释Javascript中的本地文件访问.上述文章摘要:
规范提供了几个用于从"本地"文件系统访问文件的接口:
<input type="file" multiple>在桌面上思考或拖动文件目录).- 编辑 -
请参阅下面的Paul D. Waite的评论
Cha*_*ert 83
如果用户选择文件<input type="file">,您可以使用File API 读取和处理该文件.
设计不允许读取或写入任意文件.这违反了沙箱.来自维基百科 - > Javascript - >安全性:
JavaScript和DOM为恶意作者提供了通过Web在客户端计算机上运行脚本的潜力.浏览器作者使用两个限制包含此风险.首先,脚本在沙箱中运行,在沙箱中,脚本只能执行与Web相关的操作,而不能执行创建文件等通用编程任务 .
2016 UPDATE:直接访问文件系统经由能够文件系统API,这是仅由铬和歌剧支持和可能最终没有被实现为通过其他浏览器(与边缘的例外).有关详细信息,请参阅Kevin的回答.
Jas*_*n S 21
更新自Firefox 17以来,此功能已被删除(请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=546848).
在Firefox上,您(程序员)可以在JavaScript文件中执行此操作:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
Run Code Online (Sandbox Code Playgroud)
并且将提示您(浏览器用户)允许访问.(对于Firefox,每次启动浏览器时都需要执行一次)
如果浏览器用户是其他人,则必须授予权限.
Kev*_*vin 19
如前所述,FileSystem和File API以及FileWriter API可用于从浏览器选项卡/窗口的上下文读取和写入文件到客户端计算机.
有一些与FileSystem和FileWriter API有关的事情你应该知道,其中一些已被提及,但值得重复:
以下是如何直接和间接使用API来执行以下操作的简单示例:
写文件:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Run Code Online (Sandbox Code Playgroud)
阅读文件:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Run Code Online (Sandbox Code Playgroud)
使用原始文件,FileWriter和FileSystem API
写文件:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Run Code Online (Sandbox Code Playgroud)
阅读文件:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Run Code Online (Sandbox Code Playgroud)
尽管FileSystem和FileWriter API不再符合标准,但在我看来,在某些情况下,它们的使用是合理的,因为:
但是,"某些情况"是否包含您自己的情况,由您决定.
*BakedGoods由这个人维持正确:)
NW.js允许您使用Javascript创建桌面应用程序,而不会通常在浏览器上放置所有安全限制.因此,您可以使用函数运行可执行文件,或创建/编辑/读取/写入/删除文件.您可以访问硬件,例如当前CPU使用率或正在使用的总RAM等.
您可以使用它创建一个不需要任何安装的Windows,Linux或Mac桌面应用程序.
这是通用GUI的NW.js的框架:
小智 6
如果您在Windows上进行部署,则Windows脚本宿主会为文件系统和其他本地资源提供非常有用的JScript API.但是,将WSH脚本合并到本地Web应用程序可能并不像您希望的那样优雅.
如果您有输入栏
<input type="file" id="file" name="file" onchange="add(event)"/>
Run Code Online (Sandbox Code Playgroud)
您可以使用BLOB格式获取文件内容:
function add(event){
var userFile = document.getElementById('file');
userFile.src = URL.createObjectURL(event.target.files[0]);
var data = userFile.src;
}
Run Code Online (Sandbox Code Playgroud)