通过JavaScript下载文件?

时间:2010-07-01 15:27:31

标签: javascript

所以今天我想到了。我从我的JavaScript应用程序中已经存储在内存中的数据生成CSV,然后通过文件下载提示将这些数据泵送到用户的浏览器 - 全部使用JavaScript - 。

这可能吗?

3 个答案:

答案 0 :(得分:2)

如果你想完全在客户端完成,没有任何服务器交互,你至少需要Flash的帮助。

看看Downloadify,这是我见过的最好的客户端文件生成。

检查demo

答案 1 :(得分:1)

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

以下是解决方案:

  1. 我在SmartClient的项目构建中。我们需要下载/导出网格数据 (表格式结构)。
  2. 我们使用RESTish Web服务来提供服务器端的数据。所以我无法打两次网址;一个用于网格,另一个用于导出/转换要下载的数据。
  3. 我做了两个JSP,即:blank.jsp和export.jsp。
  4. blank.jsp实际上是空白的,现在我需要导出网格数据 我已经在客户端。
  5. 现在,当用户要求导出网格数据时(通过点击链接),我在下面做:     一个。使用url blank.jsp打开一个新窗口     湾使用document.write我在其中创建一个表单,其中包含一个字段名称文本,并设置数据以在其中导出。     C。现在将该表单POST到相同层次的export.jsp。     d。我在下面粘贴的export.jsp的内容是不言自明的。
  6. //代码开始

    <%@ 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>
    

    //代码结束

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

    由于 SHAILENDRA

答案 2 :(得分:0)

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

这将提示用户按照您的意愿打开或保存文件。

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