javaweb之文件下载的实现

首先是JSP页面,得提供一个下载的连接

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/DemoTest/Download?filename=1.png">下载</a>
</body>
</html>

然后是后台下载,注释都在下面:关键就是设置两个头和一个流

package mine.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

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;

@WebServlet("/Download")
public class Download extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Download() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//注意,这里的第一句话是servlet自动生成的,如果response既getwriter又getoutpustream的话就会出现
		//java.lang.IllegalStateException: getWriter() has already been called for this response
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		System.out.println("执行了");
		//获取文件的名字
		String filename=request.getParameter("filename");
		System.out.println(filename);
		//获取文件在服务器中的路径
		String path=getServletContext().getRealPath("/upload");
		System.out.println(path);
		//获取文件的输入流
		InputStream in=new FileInputStream(path+"/"+filename);
		//设置连个头信息
		String type=getServletContext().getMimeType(filename);
		response.setContentType(type);
		response.setHeader("Content-Disposition", "attachment;filename="+filename);
		//获取输出流并进行读写操作
		ServletOutputStream os=response.getOutputStream();
		int len=0;
		byte[] b=new byte[1024];
		while((len=in.read(b))!=-1) {
			os.write(b,0,len);
		}
		in.close();
		os.close();
	}

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

}

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/86541230
今日推荐