通过Servlet下载文件的路径问题
Saro 2004-04-30 09:05:18 package ebusiness.event;
/**
* <p>Title:文件下载类 </p>
* <p>Description:需要下载文件时使用此类 </p>
* <p>Copyright: Copyright (c) 2004</p>
* @author kewell
* @version 1.0
*/
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.RequestDispatcher;
import java.util.ResourceBundle;
/**
*用于下载文件的servlet
*@vesion 1.0
*/
public class DownloadFile extends HttpServlet {
//字符编码
private final String ENCODING="GB2312";
//内容类型
private final String CONTENT_TYPE="text/html;charset=GB2312";
//要下载的文件存放的路径
private String downloadFileDir="download\\";
/**
*执行HTTP get操作
* @param req 从用户来的请求
* @param resp servlet的回应
*/
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//设置request对象的字符编码
request.setCharacterEncoding(ENCODING);
//从request 中取出要下载文件的名字
String fileName=request.getParameter("filename");
if(fileName==null || fileName.trim().equals("")){
//设置response对象ContentType
response.setContentType(CONTENT_TYPE);
//输出错误信息
PrintWriter out=response.getWriter();
out.println("<font color=red>输入的文件名无效!</font>");
out.close();
}
else{
//下载文件的完整路径名
String fullFileName=downloadFileDir+fileName;
System.out.println("下载文件:"+fullFileName);
//根据文件的类型设置response对象ContentType
String contentType =getServletContext().getMimeType(fullFileName);
if(contentType==null)
contentType="application/octet-stream";
response.setContentType(contentType);
response.setHeader("content-disposition","attachment;filename=\""+fileName+"\"");
InputStream is=null;
OutputStream os=null;
try{
is=new BufferedInputStream(new FileInputStream(fullFileName));
//定义输出字节流
java.io.ByteArrayOutputStream baos=new ByteArrayOutputStream();
//定义response的输出流
os =new BufferedOutputStream(response.getOutputStream());
//定义buffer
byte[] buffer=new byte[4*1024];//4k Buffer
int read =0;
//从文件中读入数据并写到输出字节流中
while ((read=is.read(buffer))!=-1){
baos.write(buffer,0,read);
}
//将输出字节流写到response的输出流中
os.write(baos.toByteArray());
}
catch (IOException e){
e.printStackTrace();
}
finally{
//关闭输出字节流和response输出流
os.close();
is.close();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
//调用doGet方法
doGet(req,resp);
}
}
程序没错,只是路径总是找不到,预下载的文件为webapp\business\download\xx.rar
如果有另外的可控制用户下载文件的方法,一样给分,在线等候