下载文件的jsp(不是直接打开)

<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.regex.*"%>
<%
/*
参数1 :原始文件名(物理文件名)

参数2 :新文件名(重命名)

参数3 :文件所在路径
*/

 String sFileName = "";
 String sNewName = "";
 String sPath = "";
 final String UPLOAD_DIR = "/file/UploadFile";
 
 if(session.getAttribute("USER_INFO")==null)
  return;
 
 if(request.getParameter("filename")!=null)
  sFileName = request.getParameter("filename");
 else
  return;
 if((request.getParameter("newname")!=null)&&(!request.getParameter("newname").equals(""))) 
  sNewName = request.getParameter("newname");
 else
  sNewName = sFileName;
 if((request.getParameter("updir")!=null)&&(!request.getParameter("updir").equals(""))) 
  sPath = request.getParameter("updir");
 else{
  String strAbsPath=application.getRealPath(request.getRequestURI());  
  sPath = strAbsPath.substring(0,strAbsPath.indexOf("pages"))+UPLOAD_DIR;
 }
/*
 java.io.BufferedInputStream bis=null;
 java.io.BufferedOutputStream  bos=null;
 try{
   sNewName = new String(sNewName.getBytes("iso8859-1"),"gb2312");
   //response.setContentType("application/x-msdownload");
   response.reset();
   response.setHeader("Content-Disposition","attachment; filename="+new String(sNewName.getBytes("gb2312"),"iso8859-1"));
   bis =new java.io.BufferedInputStream(new java.io.FileInputStream(sPath +"/"+ sFileName));
   System.out.println("download file : "+sPath+"/"+sFileName);
   bos=new java.io.BufferedOutputStream(response.getOutputStream());
   byte[] buff = new byte[2048];
   int bytesRead;
   while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
   bos.write(buff,0,bytesRead);
   }
 }
 catch(Exception e){
   e.printStackTrace();
 }
 finally {
   if (bis != null)bis.close();
   if (bos != null)bos.close();
 }
*/
 
 try{
  FileInputStream in=new FileInputStream(new File(sPath,sFileName));
  //response.setContentType("application/msword");
  response.reset();
  response.setHeader("Content-Disposition", "attachment;filename=/"" + sNewName +"/"");

  int i=0;
  while((i=in.read())!=-1)
     out.write(i);
  in.close();
  out.close();
 }
 catch(FileNotFoundException e){
     out.println("?????? "+sPath+"/"+sFileName);
     e.printStackTrace();
     out.close();
     return;
 }

%>

 需要注意的是:

在response.setHeader("Content-Disposition", "attachment;filename=/"" + sNewName +"/""); 这句之前,需要

加上response.reset();

否则下载后的文件和原始文件不一样,文件大小不同,而且内部格式被重置,切记切记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值