通过JavaScript下载文件?

通过JavaScript下载文件?,javascript,Javascript,所以我今天有个想法。我从JavaScript应用程序内存中已有的数据生成CSV,然后通过一个文件下载提示符(全部为JavaScript)将该数据传输到用户的浏览器 这可能吗?如果您的服务器设置为触发对给定MIME类型的下载,那么您只需直接执行location.href='myFile.csv' 这将提示用户根据需要打开或保存文件 这确实需要将您的服务器配置为以这种方式运行。如果您希望完全在客户端进行操作,而不需要任何服务器交互,则至少需要Flash的帮助 请看一下,这是我见过的最好的客户端文件生

所以我今天有个想法。我从JavaScript应用程序内存中已有的数据生成CSV,然后通过一个文件下载提示符(全部为JavaScript)将该数据传输到用户的浏览器


这可能吗?

如果您的服务器设置为触发对给定MIME类型的下载,那么您只需直接执行
location.href='myFile.csv'

这将提示用户根据需要打开或保存文件


这确实需要将您的服务器配置为以这种方式运行。

如果您希望完全在客户端进行操作,而不需要任何服务器交互,则至少需要Flash的帮助

请看一下,这是我见过的最好的客户端文件生成工具


检查。

通过javascript下载本地/客户端内容的解决方案并不简单。我已经使用smartclient html jsp实现了一个解决方案

以下是解决方案:

  • 我参与了一个基于SmartClient的项目。我们需要下载/导出网格的数据 (桌状结构)
  • 我们使用restishweb服务从服务器端提供数据。所以我不能两次点击网址;一次用于网格,第二次用于导出/转换要下载的数据
  • 我做了两个jsp,即blank.jsp和export.jsp
  • jsp实际上是空白的,现在我需要导出网格数据 我在客户端已经有了
  • 现在,当任何用户要求导出网格数据时(通过单击链接),我会执行以下操作: A.使用url blank.jsp打开一个新窗口 B使用document.write,我在其中创建了一个表单,其中包含一个字段名文本,并在其中设置要导出的数据。 C现在将该表单发布到具有相同继承权的export.jsp。 D下面我粘贴的export.jsp的内容是不言自明的
  • //代码开始

    <%@ page import="java.util.*,java.io.*,java.util.Enumeration"%>
    <%
        response.setContentType ("text/csv");
        //set the header and also the Name by which user will be prompted to save
        response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\"");
        String contents = request.getParameter ("text");
        if (!(contents!= null && contents!=""))
            contents = "No data";
        else
            contents = contents.replaceAll ("NEW_LINE", "\n");
    
        //Open an input stream to the file and post the file contents thru the
        //servlet output stream to the client m/c
    
        InputStream in = new ByteArrayInputStream(contents.getBytes ());
        ServletOutputStream outs = response.getOutputStream();
    
        int bit = 256;
        int i = 0;
        try {
            while ((bit) >= 0) {
                bit = in.read();
                outs.write(bit);
            }
            //System.out.println("" +bit);
        } catch (IOException ioe) {
            ioe.printStackTrace(System.out);
        }
        outs.flush();
        outs.close();
        in.close();
    %>
    <HTML>
    <HEAD>
    
    </HEAD>
    
    <BODY>
    
    
    </BODY>
    </HTML>
    
    
    = 0) {
    位=in.read();
    输出。写入(位);
    }
    //System.out.println(“+”位);
    }捕获(ioe异常ioe){
    ioe.printStackTrace(系统输出);
    }
    out.flush();
    out.close();
    in.close();
    %>
    
    //代码端

    此代码在生产环境中测试和部署/工作,这也是跨浏览器功能

    谢谢
    Shailendra

    此Javascript应用程序的上下文是什么?它在哪里运行,是web服务器还是浏览器?这只能在Redmond的一个团队开发的某个webbrowser上实现,该团队使用的是一个被称为“ActiveX”的充满安全漏洞的专有框架。即使如此,我认为在最新版本的webbrowser中,您也会收到警告。在全世界都知道的所有其他网络浏览器中,这是不可能的。@BalusC,在任何浏览器上借助Flash也是可能的。@CMS:ActionScript不是JavaScript,这里的问题都是关于:)但是你是对的,Flash也是可能的。不是JavaScript。@BalusC,谢谢!,你说得对,它只是ActionScript的JavaScript代理API。谷歌也在Chrome中添加了一些本机文件API访问。嘿@Drew,这些API是Chrome浏览器特有的吗?我的是独立于浏览器的,在IE上也没有问题,IE通过应用互联网安全来停止自动脚本执行。