web项目,文件下载的Servlet示例

文件下载的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;

/**
  * 文件下载
 * @title DownloadServlet.java
 */
@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");
		//System.out.println(path);
		
		//String filename = "girl.jpg";
		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"));
		// D:\software\Programer\Server\tomcat-8.5.34\webapps\web04\\upload\girl.jpg
		//new FileInputStream(path + "\\" + filename);
		
		// 创建输出流
		ServletOutputStream os = response.getOutputStream();
		
		byte[] b = new byte[1024];
		int len;
		while((len = is.read(b)) != -1) {
			os.write(b, 0, len);
		}	
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值