登录成功后完成文件下载功能

1.登录成功后,完成文件的下载.

基本操作和14天笔记第一题一样

[1]




Insert title here


文件下载的列表页面

<h3>手动编码的方式下载</h3>
<a href="/day15/DownloadServlet1?filename=ooo.txt">ooo.txt</br></a>
<a href="/day15/DownloadServlet1?filename=ooo.zip">ooo.zip</br></a>
<a href="/day15/DownloadServlet1?filename=Dog123.jpg">Dog123.jpg</a>


[2]
package com.itheima_download;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1.获取请求参数
    String filename = request.getParameter("filename");
    //2.完成文件下载   【两头一流】
    //2.1 设置Content-type响应头(MIME类型)    【ServletContext可以完成Mime类型】
    ServletContext context = getServletContext();
    String mimeType = context.getMimeType(filename);
    response.setHeader("Content-type", mimeType);
    //2.2 设置Content-Disposition文件下载响应头
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    //2.3获取输入流(读取服务器对象的文件)
    InputStream is = context.getResourceAsStream("/download/"+filename);
    //3.获取输出流
    OutputStream os = response.getOutputStream();

    int len = 0;
    byte[] by = new byte[1024];
    while((len = is.read(by))!= -1){
        os.write(by, 0, len);
    }
    is.close();     //响应流os可以不用关,因为一旦做出响应后,就自动关闭
}


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

}

猜你喜欢

转载自blog.csdn.net/pf503603/article/details/82048578