JavaScript FAQ (十九)——文件访问

简介: 十六、文件访问(File Access) 1、读取文件(Reading a File)Q:如何将文件读取到JavaScript变量中?A:根据脚本运行的环境和文件的位置,你可以有以下选项:XMLHttpRequest 对象(通过URL读取网站上可用的文件)FileSystemObject(如果你在一个被信任的环境下使用Windows Scripting Hosting或者IE)一个读取文件或者URL的“助手”Java applet 关于前两个选项的讨论,请点击上面的超链接。

十六、文件访问(File Access)

 

1、读取文件(Reading a File

Q:如何将文件读取到JavaScript变量中?

A:根据脚本运行的环境和文件的位置,你可以有以下选项:

  • XMLHttpRequest 对象(通过URL读取网站上可用的文件)
  • FileSystemObject(如果你在一个被信任的环境下使用Windows Scripting Hosting或者IE)
  • 一个读取文件或者URL的“助手”Java applet

 关于前两个选项的讨论,请点击上面的超链接。

下面我们会讨论最后的一个——为脚本读取文件的Java applet助手。读取文件机制的一个可能实现如下:

1. 脚本调用applet的一个public方法。

2. 这个public方法在applet的另一个线程中初始化读取过程,然后返回。

3. Applet中另一个线程中的读取过程继续执行。同时,脚本持续问applet是否完成读取。

4. Applet完成读取,把文件内容放在applet的一个public的字符串变量中。

5. 脚本看到applet完成读取。

6. 脚本将文件内容从applet的public变量中复制到JavaScript的变量。

      注意未签名的Java applet代码只能读取那些和代码有同一来源(the same origin)的文件。例如,如果你的未签名代码被发布在一个Web服务器上,那么它只允许通过URL阅读在同一个Web服务器上文件。如果你的代码在本地的磁盘上,那么(最多)它只能阅读在同一个磁盘上的文件。

      如果你想阅读有不同来源的文件,你需要对代码签名。(更多信息,请参考写文件;十分相似的安全机制应用于读取那些和代码没有相同来源的文件。)

      这里有一个实现了上述读取机制的简单的例子。下面的矩形是一个叫做ReadURL.class的Java applet。这个Applet读取选择的文件内容到一个public变量fileContent中。完成时,applet将它的public变量finished设为1。

Applet好像不被支持,请到原文处操作实例--译者注

      示例中的脚本读取选择文件,这个文件包含了一个这个FAQ讨论的一些内容。

Choose a file to readJavaScript FAQ Home (file startpag.htm)Reading a File (file reading2.htm)Writing a File (file writinga.htm)

      启动读取进程的JavaScript代码如下:

var fileContent='';
var theLocation='';

function readFileViaApplet(n) {
 document.f1.t1.value='Reading in progress...';
 document.ReadURL.readFile(theLocation);
 setTimeout("showFileContent()",100);
}

function showFileContent() {
 if (document.ReadURL.finished==0) {
  setTimeout("showFileContent()",100);
  return;
 }
 fileContent=document.ReadURL.fileContent;
 document.form1.textarea1.value=fileContent;
}

 

2. 写文件(Writing a File

Q:如果通过JavaScript写文件?

A:通过JavaScript写文件和从Java Applet写文件一样简单。脚本本身不能写文件,它需要调用一个Java applet的public方法为它完成所有写文件的工作。

坏消息是:

1. 写文件是一个授权操作,因此你的applet必须已经有数字签名以便写文件。

2. 针对Internet Explorer的Applet签名和针对Netscape Navigator的完全不同。

3. 已签名的applet在Netscape Navigator 3中也可能不正产工作。

4. 最坏的是,把授权操作放在已签名的applet的public方法中是非常不安全。如果你发布了这样一个applet,恶意代码可以很容易的推翻applet的public方法,你(applet发布者/签署者)将会因为任何破坏被起诉。

因此,尽管在主流浏览器的版本4中技术上可行,没有人通过签名的applet发布写文件的脚本。

目录
相关文章
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
5月前
|
JavaScript API 开发者
在Vue.js中设置方法时访问$vuetify实例的正确姿势。
总之,访问 `$vuetify`实例是一种直观而有效的方法,它使得在Vue组件中处理Vuetify相关的逻辑成为可能。务必留意正确使用 `this`上下文,并确保在执行任何操作之前,Vue组件实例已经正确初始化并且可用。这种方式在组件自身逻辑与Vuetify的界面表现层之间架起了一座桥梁,使得开发者可以通过书写组件代码来控制和优化用户界面。
88 14
|
4月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
139 1
|
3月前
|
编解码 JavaScript 前端开发
如何在网页播放英文的m3u8文件(基于Javascript搭建的在线网页工具)
什么是m3u8?又该如何在网页中高效、便捷地播放英文的m3u8文件呢?今天这篇文章就带你一起了解,并推荐一种基于Javascript搭建的在线网页工具,让你轻松解决播放问题。
838 0
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
166 0
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
323 0
Next.js 实战 (六):如何实现文件本地上传
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
445 12
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
460 2
前端JS读取文件内容并展示到页面上
|
JavaScript 前端开发 索引
JavaScript基础知识-数组基于索引访问
关于JavaScript数组基于索引访问的基础知识介绍。
97 1
JavaScript基础知识-数组基于索引访问
|
JavaScript 前端开发 数据安全/隐私保护
混淆指定js文件
【9月更文挑战第26天】JavaScript 混淆旨在保护代码知识产权、减小文件体积和提高安全性。方法包括变量名和函数名混淆、代码压缩、控制流平坦化及字符串加密。常用工具如 UglifyJS 和 JScrambler 可实现这些功能。然而,混淆可能带来兼容性和调试困难等问题,需谨慎使用并确保法律合规。
215 5