文件的下载
1.基本操作过程: 已知IOUtils 可能会报bug 导致空指针异常!需要重新导包
当然 前提是你必须确认回传的数据格式告知浏览器的是正确的
resp.setHeader("Content-Disposition", "attachment;filename="+fileType);
package why.com;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
/**
* @program: WEB
* @description: 文件的下载
* @author: @why
* @create: 2020-05-23 22:50
**/
public class download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//不管3721 👴 先弄一个context再说
ServletContext servletContext = getServletContext();
//1.👴先弄个文件名 并得到文件的类型
String Filename="tuo.jpg";
String type=servletContext.getMimeType("/file/"+Filename);
//2.通知浏览器 告诉这个文件的内容以及其是一个下载请求
String fileType= URLEncoder.encode("美眉写真.jpg","utf-8");
resp.setHeader("Content-Disposition", "attachment;filename="+fileType);
resp.setContentType(type);
//3.👴要像流一样将文件读取出来
InputStream inputStream=servletContext.getResourceAsStream("/file/"+Filename);
OutputStream outputStream=resp.getOutputStream();
IOUtils.copy(inputStream, outputStream);
// byte data[]=new byte[66666];
// inputStream.read(data);
// outputStream.write(data);
}
}
使用jar包
// 1,获要下载的文件名
String filename="3.jpg";
// 2. 通过响应头告诉客戶端返回的数据类型
ServletContext context= getServletContext();
String FileType= context.getMimeType("/file/"+filename);
System.out.println(FileType);
resp.setContentType(FileType);
String name= URLEncoder.encode("你.jpg","utf-8");
//3、还要告诉客戶端收到的数据是用来下载
resp.setHeader("Content-Disposition", "attachment;"+name);
// 4,读取要下载的文件内容
InputStream inputStream=context.getResourceAsStream("/file/"+filename);
OutputStream outputStream=resp.getOutputStream();
// 5,把下载的文件内容回传给客戶端
IOUtils.copy(inputStream, outputStream);