文件下载

package com.itcsl.web.dpwnload;

import com.itcsl.web.utils.DownLoadUtils;

import javax.servlet.ServletContext;
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 java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/dpwnloadServlet")
public class dpwnloadServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


		//1.获取请求参数
		String filename = request.getParameter("filename");
		//2.使用字节输入流加载文件进内存
		//2.1找到问价按的服务器路径
		ServletContext context = this.getServletContext();
		String realPath = context.getRealPath("/img/" + filename);
		//2.2用字节流关联
		FileInputStream file = new FileInputStream(realPath);
		//3设置response的响应头
		//3.1设置响应头类型
		String mimeType = context.getMimeType(filename);
		response.setHeader("content-type",mimeType);
		//3.2设置响应头打开方式,content-disposition

		//解决中文文件名问题
		//1.获取user-age请求头
		String agent = request.getHeader("user-agent");
		//2.使用工具类方法编码文件名即可
		filename = DownLoadUtils.getFileName(agent, filename);

		response.setHeader("content-disposition","attachment;filename="+filename);

		//4.输入流的数据写出输出流
		ServletOutputStream outputStream = response.getOutputStream();
		byte[] bytes = new byte[1024];
		int len=0;
		while((len=file.read(bytes))!=-1){
			outputStream.write(bytes,0,len);
		}

		file.close();
		outputStream.close();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

工具类Utils

package com.itcsl.web.utils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Base64;


public class DownLoadUtils {
    public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
        if (agent.contains("MSIE")) {
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else if (agent.contains("Firefox")) {
            // 火狐浏览器
            Base64.Encoder encoder = Base64.getEncoder();
            filename = "=?utf-8?B?" + encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

html页面

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
<a href="/day15/dpwnloadServlet?filename=1.jpg">图片1</a>
<a href="/day15/dpwnloadServlet?filename=二.jpg">图片2</a>
</body>
</html>
每个人都是在努力的路上,别因为别人的误解而放弃,,术业有专攻,如是而已。
原文地址:https://www.cnblogs.com/16699qq/p/13551874.html