<%@ 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();
否则下载后的文件和原始文件不一样,文件大小不同,而且内部格式被重置,切记切记