Java文件下载

一、采用RequestDispatcher的方式进行

1、web.xml文件中增加

<mime-mapping>

    <extension>doc</extension>

    <mime-type>application/vnd.ms-word</mime-type>

</mime-mapping>

 

2、程序如下:

    < %@page language="java" import="java.net.*" pageEncoding="gb2312"%>

<%

response.setContentType("application/x-download");//设置为下载application/x-download

    String filenamedownload = "/ 系统解决方案 .doc";// 即将下载的文件的相对路径

    String filenamedisplay = " 系统解决方案 .doc";// 下载文件时显示的文件保存名称

    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");

    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);

 

    try

    {

        RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);

        if(dispatcher != null)

        {

            dispatcher.forward(request,response);

        }

        response.flushBuffer();

    }

    catch(Exception e)

    {

        e.printStackTrace();

    }

    finally

    {

 

    }

%>

 

二、采用文件流输出的方式下载

1、web.xml文件中增加

<mime-mapping>

    <extension>doc</extension>

    <mime-type>application/vnd.ms-word</mime-type>

</mime-mapping>

 

2、程序如下:

    < %@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gb2312"%>

<%

//关于文件下载时采用文件流输出的方式处理:

    // 加上 response.reset() ,并且所有的%>后面不要换行,包括最后一个;

    // 因为 Application Server 在处理编译 jsp 时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,

    // 而你却要进行流输出: ServletOutputStream ,这样做相当于试图在 Servlet 中使用两种输出机制,

    // 就会发生: getOutputStream() has already been called for this response 的错误

    // 详细请见《 More Java Pitfill 》一书的第二部分 Web 层 Item 33 :试图在 Servlet 中使用两种输出机制 270

    // 而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如 AutoCAD 、 Word 、 Excel 等文件

    // 下载下来的文件中就会多出一些换行符 0x0d 和 0x0a ,这样可能导致某些格式的文件无法打开,有些也可以正常打开。

    response.reset();// 可以加也可以不加

    response.setContentType("application/x-download");// 设置为下载 application/x-download

    // /../../ 退 WEB-INF/classes 两级到应用的根目录下去,注意 Tomcat 与 WebLogic 下面这一句得到的路径不同,WebLogic 中路径最后没有 /

    System.out.println(this.getClass().getClassLoader().getResource("/").getPath());

    String filenamedownload = this.getClass().getClassLoader().getResource("/").getPath() + "/../../ 系统解决方案 .doc";

    String filenamedisplay = " 系统解决方案 .doc";// 系统解决方案 .txt

    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");

    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);

    OutputStream output = null;

    FileInputStream fis = null;

    try

    {

        output = response.getOutputStream();

        fis = new FileInputStream(filenamedownload);

        byte[] b = new byte[1024];

        int i = 0;

        while((i = fis.read(b)) > 0)

        {

            output.write(b, 0, i);

        }

        output.flush();

    }

    catch(Exception e)

    {

        System.out.println("Error!");

        e.printStackTrace();

    }

    finally

    {

        if(fis != null)

        {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值