servlet实现文件下载的实用类分享_JSP教程-查字典教程网
servlet实现文件下载的实用类分享
servlet实现文件下载的实用类分享
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:packagecom;importjava.io.IOException;importjava.io.PrintWrite...

复制代码 代码如下:

package com;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.URLEncoder;

import java.util.Date;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

/**

* 文件下载类。为了防止客户端浏览器直接打开目标文件(例如在装了MS Office套件的Windows中的IE浏览器可能就会直接在IE浏览器中打开你想下载的doc或者xls文件),在响应头里加入强制下载的MIME类型。

*/

public class DownloadFile extends HttpServlet {

private static final Log log = LogFactory.getLog(DownloadFile.class);

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {

long timeStart = 0;

if(log.isDebugEnabled()){

timeStart=System.currentTimeMillis();

}

response.setContentType("application/x-download charset=UTF-8");

java.io.FileInputStream fis = null;

String filepath = request.getRealPath("");

javax.servlet.ServletOutputStream sos = null;

// System.out.println("DownloadFile filename:" + filename);

try {

if(request.getParameter("filename")==null

||request.getParameter("showName")==null){

return;

}

String filename = request.getParameter("filename");

String showName = request.getParameter("showName");

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

java.io.File file = new java.io.File(filepath + filename);

if (!file.exists()) {

log.error(file.getAbsolutePath() + " 文件不存在!");

return;

}

// 读取文件流

fis = new java.io.FileInputStream(file);

// 设置下载保存的文件名

sos = response.getOutputStream();

showName += filename.substring(filename.lastIndexOf("."));

String contentDisposition = "", browser = getBrowser(request);

if ("IE".equals(browser)) {

contentDisposition = "attachment; filename=" + URLEncoder.encode(showName, "UTF-8").replace("+", "%20");

} else if ("CH".equals(browser)) {

contentDisposition = "attachment; filename=" + MimeUtility.encodeText(showName, "UTF8", "B");

} else if ("SF".equals(browser)) {

contentDisposition = "attachment; filename=" + new String(showName.getBytes("UTF-8"), "ISO8859-1");

} else {

contentDisposition = "attachment; filename*=UTF-8''" + URLEncoder.encode(showName, "UTF-8").replace("+", "%20");

}

response.setHeader("Content-Disposition", contentDisposition);

int byteCount = 0;

if (fis != null) {

byte[] buff = new byte[1024];

int bytesRead;

while(-1 != (bytesRead = fis.read(buff, 0, buff.length))) {

sos.write(buff, 0, bytesRead);

sos.flush();

byteCount += bytesRead;

}

}

sos.flush();

if(log.isDebugEnabled()){

log.debug("文件下载完成,文件大小:"+ byteCount +",总共用时:"+ (new Date().getTime() - timeStart) +"毫秒。");

}

} catch(IOException ioe) {

ioe.printStackTrace();

} finally {

try {

if(fis!=null){

fis.close();

}

} catch (IOException e) {

} finally {

try {

if(sos!=null){

sos.close();

}

} catch (IOException e) {

}

}

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">");

out.println("<html>");

out.println(" <head>");

out.println(" <title>文件下载</title>");

out.println(" <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />");

out.println(" </head>");

out.println(" <body>");

out.print(" This is ");

out.print(this.getClass().getName());

out.println(", using the POST method");

out.println(" </body>");

out.println("</html>");

out.flush();

out.close();

}

private String getBrowser(HttpServletRequest request) {

String userAgent = request.getHeader("USER-AGENT").toLowerCase();

if (userAgent != null) {

if (userAgent.indexOf("msie") >= 0) {

return "IE";

} else if (userAgent.indexOf("mozilla") >= 0) {

return "FF";

} else if (userAgent.indexOf("applewebkit") >= 0) {

return "CH";

} else if (userAgent.indexOf("safari") >= 0) {

return "SF";

} else if (userAgent.indexOf("opera") >= 0) {

return "OP";

}

}

return null;

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新JSP教程学习
    热门JSP教程学习
    编程开发子分类