如何在javascript中打开文件流?

时间:2011-07-19 16:25:43

标签: javascript jquery html

举一个具体的例子说明我的意思:

想象一下,我有一个看起来像这样的HTML页面

<div>
   <div id="filecontents">
       <!-- some html file contents -->
   </div>
   <input type="button" />
</div>

我希望能够点击按钮,它会显示“打开或保存文件”对话框。

这甚至可能吗?

这样做的目的是让我能够使用div的内容作为文件的数据源来打开一些html,文本或CSV。

7 个答案:

答案 0 :(得分:7)

您可以使用HTML5 FileSystem API执行此操作。这里有几个教程:

浏览器支持现在很弱,但我的猜测是它最接近你想要的。

答案 1 :(得分:6)

<input type="file" />做那件事吗?

答案 2 :(得分:3)

我不明白所有这些答案都说没有插件就不可能。我会说使用标准Web技术绝对 ,但需要用户交互和服务器交互。当然,您无法通过网络在用户的计算机上阅读或书写任何内容,但您可以向用户询问文件(打开),并为用户提供文件(保存)。

要使用JavaScript打开文件,请使用<input type="file" />。如果需要,可以使用JavaScript通过调用文件输入上的click()方法(DOM方法,而不是jQuery方法)来显示打开的对话框。在onchange处理程序中,提交表单,阅读上传的文件,并将内容写入您的页面。

要使用JavaScript保存文件,请将文件内容发送到服务器,准备文件,然后使用content-disposition标题{{1}将其流回客户端}}。此标题导致文件被下载并保存用户的PC而不是在浏览器中显示。

这样做,你已经正式编写了第一个云计算应用程序!

答案 3 :(得分:2)

<input type="file" />将允许您将文件上传到服务器,但您无法直接访问该文件,也无法通过javascript直接访问本地文件系统 - 这是一项安全功能。

如果要根据文件内容以某种方式更改页面,则必须进行往返:将文件上传到服务器,然后使用所需的更改呈现新页面并发送回到客户端。

我见过一些为javascript编写的类似文件流的代码(即flash实现),但是他们必须通过ajax请求“加载”文件,然后将数据作为javascript字符串读取。

答案 4 :(得分:1)

由于安全原因,您无法从javascript访问本地文件系统。但是,您可以接收文件via drag and drop in modern browsers或使用与您的javascript通信的java applet

编辑:忘记了Michael Mior关联的新HTML5文件API。按照他的回答,他就是男人。如果您需要跨浏览器支持,请使用java applet,它很痛苦但有效。

答案 5 :(得分:0)

不是纯JavaScript。例如,您无法打开文件对话框来保存部分HTML。即使可以,出于安全原因,也无法使用JavaScript打开本地文件(否则,恶意网站可能会窃取您的所有数据)。

但是每个浏览器都允许编写插件(大多数都是用JavaScript编写的),所以你可以尝试这种方法。

答案 6 :(得分:-3)

使用此脚本并将其放在文件浏览器应显示的按钮中。

if foo["someArg"] == nil { foo["someArg"] = "default value" }