【问题标题】:Is it possible to access local file via javascript?是否可以通过javascript访问本地文件?
【发布时间】:2011-07-19 05:55:05
【问题描述】:
如果(窗口。ActiveXObject){ 尝试 { var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.CopyFile("C:\\Program Files\\GM4IE\\scripts\\source.txt","C:\\Program Files\\GM4IE\\scripts\\target.txt", 1); fso = null; } 抓住(e){ 警报(例如消息); } }

我收到错误: “自动化服务器无法创建对象” 在我创建 ActiveXObject 实例的行上。
我知道使用 javascript 访问硬盘驱动器数据被认为是非常糟糕的,但我只需要它。
我正在使用 IE8 ,Greasemonkey4IE 来运行我的 javascript。

谢谢你,
莫希特

******************************

函数写入文件() { var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.CopyFile("C:\\source.txt","C:\\target.txt", 1); }

我将上面的代码放在一个简单的 HTML 页面中,它运行良好。
http://www.c-point.com/JavaScript/articles/file_access_with_JavaScript.htm
您可以在上述位置找到类似的代码。
我稍微修改了一下,很难。
但是当我尝试通过 GreaseMonkey4IE 运行它时,它只会吐出我之前指定的相同错误。



伙计们,我做到了,但非常感谢您快速而有帮助的回复。
我所做的只是:
转到工具 > Internet 选项 > 安全 > 自定义级别
在 ActiveX 控件和插件下,为未标记为安全的初始化和脚本 ActiveX 控件选择启用。

【问题讨论】:

标签: javascript


【解决方案1】:

使用本机 JavaScript,不,通常不可能访问本地文件。使用 ActiveX、Flash 或 Java 等插件和扩展程序,您可以绕过此规则,但通常会遇到一些困难。

对于此一般规则的某些浏览器和操作系统特定的例外情况,您可能需要查看此处:

Local file access with javascript

请注意,截至 2012 年底,所有主要浏览器都支持 FileReader API,并提供了一种原生 JavaScript 机制来访问用户指定的本地文件(通过 input 元素或通过将它们放入浏览器中)。

这仍然不能用于按名称/路径访问任意文件,如原始问题中的示例所示。

【讨论】:

  • -1 window.requestFileSystem。可以访问文件系统
  • @Raynos - 检查您自己的参考资料。该功能仅在 HTML5 中可用,目前仅受 Chrome 支持,并且仅允许您访问可能满足也可能不满足 OP 要求的沙箱。我在回答中说有特定于浏览器和操作系统的解决方法。但是仍然不能一般访问本地文件。
  • @Quentin - 谢谢,注意到了。
【解决方案2】:

HTML5 File API 有多种访问本地文件的方法。

window.requestFileSystem 允许您请求访问文件系统。浏览器对此的支持很差(仅限 Chrome)。

FileReader 是 HTML5 FileReader API,它允许您以编程方式读取用户通过 <input type='file' /> 选择的文件,浏览器对此的支持更好。

您应该使用诸如 flash 和 POST 到服务器的后备方法来访问完整的文件。

通常读取任意文件被认为是“欺骗浏览器”,因此我必须使用安全的 HTML5、ActiveX 或 Flash。所有这 3 个都需要用户权限。

【讨论】:

  • 并且根本不支持 IE8,问题状态正在使用。
  • 那他需要调试他的activeX代码或者使用flash程序访问本地系统。
  • window.requestFileSystem 仅适用于沙盒文件夹
【解决方案3】:

经过一番研究,我发现:

 var fso = new ActiveXObject("Scripting.FileSystemObject");
 //This line will create a xml file on local disk, C drive
 fh = fso.CreateTextFile( "C:\\fileName.xml", true);
 fh.WriteLine("this is going to be written in fileName.xml");

这是我们可以做到的。还有其他方法。

访问本地文件系统是一件非常糟糕的事情,但我们可以做到。

自动化服务器无法创建对象

要消除此错误,请转到 工具 → Internet 选项 → 安全 → 选择 Internet 图标 → 单击自定义级别 → 选择启用 用于初始化和脚本 ActiveX 控件未标记为安全的脚本。

除了 IE8,我还没有在任何其他浏览器上测试过这个,但我相信它会工作。

【讨论】:

  • 创建文件时出现 Permission Denied 错误。但我可以在同一个文件夹中手动创建文件。
  • 这种方法一直是 Windows/IE 专有的,近年来,微软有phased support out
猜你喜欢
  • 2017-04-23
  • 2022-01-18
  • 2017-03-23
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多