Hello World
Java技术学习
posts - 17,  comments - 7,  trackbacks - 0

 

jsp中实现文件下载的最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>。但是这样服务器上的目录资源会直接暴露给最终用户,会给网站带来一些不安全的因素。因此可以采用其它方式实现下载,可以采用:1、RequestDispatcher的方式进行;2、采用文件流输出的方式下载。

1、采用RequestDispatcher的方式进行

jsp页面中添加如下代码:

<%@ page contentType="application/x-download; charset=GB18030" %>
<%@ page import="java.net.URLEncoder" %>
<%
   response.setContentType(
"application/x-download");//设置为下载application/x-download
     String filedownload = "/要下载的文件名";//即将下载的文件的相对路径
     String filedisplay = "最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称
     String filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");
     response.addHeader(
"Content-Disposition","attachment;filename=" + filenamedisplay);
     
try
     {
         RequestDispatcher dis 
= application.getRequestDispatcher(filedownload);
         
if(dis!= null)
         {
             dis.forward(request,response);
         }
         response.flushBuffer();
     }
     
catch(Exception e)
     {
         e.printStackTrace();
     }
     
finally
     {
    
     }
%>


2、采用文件流输出的方式下载
<%@page language="java" contentType="application/x-msdownload"   pageEncoding="gb2312"%><%
     
//关于文件下载时采用文件流输出的方式处理:
     
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个;

     response.reset();
//可以加也可以不加
     response.setContentType("application/x-download");
     String filedownload 
= "想办法找到要提供下载的文件的物理路径+文件名";
     String filedisplay 
= "给用户提供的下载文件名";
     filedisplay 
= URLEncoder.encode(filedisplay,"UTF-8");
     response.addHeader(
"Content-Disposition","attachment;filename=" + filedisplay);

     OutputStream outp 
= null;
     FileInputStream in 
= null;
     
try
     {
         outp 
= response.getOutputStream();
         in 
= new FileInputStream(filenamedownload);

         
byte[] b = new byte[1024];
         
int i = 0;

         
while((i = in.read(b)) > 0)
         {
             outp.write(b, 
0, i);
         }
         outp.flush();
     }
     
catch(Exception e)
     {
         System.out.println(
"Error!");
         e.printStackTrace();
     }
     
finally
     {
         
if(in != null)
         {
             in.close();
             in 
= null;
         }
         
if(outp != null)
         {
             outp.close();
             outp 
= null;
         }
     }
%>
posted on 2007-05-22 14:51 Java初心 阅读(250) 评论(0)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜