在Myeclipse里面BASE64Encoder不支持头文件 ,以下大佬链接有解决方案
https://blog.csdn.net/erlian1992/article/details/79518416
package com.xiaonuolen.downlandsServlet;
import java.io.FileInputStream;
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 sun.misc.BASE64Encoder;
/**
* Servlet implementation class DownServlet
*/
@WebServlet("/DownServlet")
public class DownServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*************1.接受参数*************/
String name = request.getParameter("filename");
/*************2.对接收的参数进行编码处理 也许你的代码会出现乱码问题所以这边要改 我试过在jsp里面用utf-8发现没有什么问题
//把乱码转换二进制
byte[] bytes = name.getBytes("ISO8859-1");
//再转换成UTF-8进行编码
name = new String(bytes,"UTF-8");
*************/
/*************3.告诉游览器响应的文件类型*************/
String mimeType = this.getServletContext().getMimeType(name);//获取类型
response.setContentType(mimeType);//设置mimetype 设置类型
/*************4.告诉游览器以附件形式下载并根据游览器进行转码*************/
/*获取客户端信息*/
String agent = request.getHeader("User-Agent");
//定义一个变量记录编码后的名字
String filenameEncoder = "";
if(agent.contains("MSIE")) {
//IE编码
filenameEncoder = URLEncoder.encode(name,"utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
}
else if(agent.contains("Firefox")) {
//火狐编码
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(name.getBytes("utf-8")) + "?=";
}
else {
//游览器编码
filenameEncoder = URLEncoder.encode(name,"utf-8");
}
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //告诉游览器不要去解析,以附件形式下载
/*************5.响应给游览器*************/
String path = this.getServletContext().getRealPath("down/"+name);
FileInputStream in = new FileInputStream(path);
byte[] buffer=new byte[1024];
int len = 0;
ServletOutputStream out = response.getOutputStream();
while((len=in.read(buffer))!=-1) {
out.write(buffer,0,len);
}
in.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}