|
二、源码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.Servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileDownload extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 服务器相对路径
String path = req.getParameter( " path " );
// 服务器绝对路径
path = getServletContext().getRealPath( " / " ) + path;
// 检查文件是否存在
File obj = new File(path);
if ( ! obj.exists()) {
res.setContentType( " text/HTML;charset=GBK " );
res.getWriter().print( " 指定文件不存在! " );
return ;
}
// 读取文件名:用于设置客户端保留时指定默认文件名
int index = path.lastIndexOf( " \\ " ); // 条件:传入的path字符串以“\”表示目录分隔符
String fileName = path.substring(index + 1 );
// 写流文件到前端浏览器
ServletOutputStream out = res.getOutputStream();
res.setHeader( " Content-disposition " , " attachment;filename= " + fileName);
BufferedInputStream bis = null ;
BufferedOutputStream bos = null ;
try {
bis = new BufferedInputStream( new FileInputStream(path));
bos = new BufferedOutputStream(out);
byte [] buff = new byte [ 2048 ];
int bytesRead;
while ( - 1 != (bytesRead = bis.read(buff, 0 , buff.length))) {
bos.write(buff, 0 , bytesRead);
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null )
bis.close();
if (bos != null )
bos.close();
}
}
}
三、web.xml配置
< servlet >
< servlet-name > FileDownload </ servlet-name >
< servlet-class > com.fastunit.test.FileDownload </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > FileDownload </ servlet-name >
< url-pattern > /download </ url-pattern >
</ servlet-mapping > |
|