Servlet实现文件下载源代码.doc
文本预览下载声明
Servlet实现文件下载源代码
一、如何使用
如果此Servlet命名为download,请求的URL为:/download?path=xxx,请求后出现下载窗口:
?二、源码
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
显示全部