文件下载的Servlet
package com.web.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.util.mime.MimeUtility;
import eu.bitwalker.useragentutils.UserAgent;
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = -4891566202618309888L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getSession().getServletContext().getRealPath("/upload");
String fileName = "美女.jpg";
String encodedFileName = null;
String userAgentString = request.getHeader("User-Agent");
String browser = UserAgent.parseUserAgentString(userAgentString).getBrowser().getGroup().getName();
if(browser.equals("Chrome") || browser.equals("Internet Exploer") || browser.equals("Safari")) {
encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\"");
} else if (browser.equals("Firefox")) {
encodedFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\"");
} else if(browser.equals("Microsoft Edge")) {
encodedFileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName*=UTF-8'zh_cn'" + encodedFileName);
} else {
encodedFileName = MimeUtility.decodeText(fileName);
response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\"");
}
FileInputStream is = new FileInputStream(new File(path, "girl.jpg"));
ServletOutputStream os = response.getOutputStream();
byte[] b = new byte[1024];
int len;
while((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
}
}