Web 基础25 文件下载概述及其入门案例

2018-04-05  本文已影响13人  小熊先生很不开心

1.1 文件的下载概述

1.2 超链接方式实现文件下载的功能

1.3 代码方式实现文件下载的功能

放置下载资源.png
<body>
    <h1>超链接实现文件下载功能</h1>
    <a href="${pageContext.request.contextPath}/download/pic01.jpg" >pic01.jpg</a>
    <br />
    <a href="${pageContext.request.contextPath}/WEB-INF/pic01.jpg" >WEB-INF/pic01.jpg</a>
    <br />
    <a href="${pageContext.request.contextPath}/download/pic01.zip" >pic01.zip</a>
</body>

注意:浏览器会根据是否能解析资源来选择是显示还是下载的
WEB-INF的资源浏览器无法访问

也需要编写一个下载页面跳转Servlet

<h1>代码方式实现文件下载的功能</h1>
<a href="${pageContext.request.contextPath}/DownloadServlet" >pic01.jpg</a>

package com.itbear.download;

import java.io.IOException;

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

public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public DownloadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //路径
        String realPath = getServletContext().getRealPath("/download");
        //名称
        String fileName = "pic01.jpg";
        //设置两个头
        String mimeType = getServletContext().getMimeType(fileName);
        response.setContentType(mimeType);
        
        response.setHeader("Content-Dispostion", "attachment;filename="+fileName);
        //IO流传输
        ServletOutputStream os = response.getOutputStream();
        
        FileInputStream fis = new FileInputStream(realPath+"/"+fileName);
        
        byte[] bys = new byte[1024];
        int len = 0;
        while((len = fis.read(bys)) != -1){
            os.write(bys,0,len);
        }
        
        fis.close();
        
    }

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

}

URL是可以 进行拼接 提交参数数据的


<h1>代码方式实现文件下载的功能</h1>
<a href="${pageContext.request.contextPath}/DownloadServlet?path=download&fileName=pic01.jpg" >pic01.jpg</a>
<br />
<a href="${pageContext.request.contextPath}/DownloadServlet?path=download&fileName=pic01.zip" >pic01.zip</a>
<br />


提交path 和 fileName

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //路径
        String path = request.getParameter("path");
        String realPath = getServletContext().getRealPath("/" + path);
        //名称
        //String fileName = "pic01.jpg";
        String fileName = request.getParameter("fileName")
        
        
        //设置两个头
        //设置Content-type
        String mimeType = getServletContext().g-etMimeType(fileName);
        response.setContentType(mimeType);
        //设置Content-Disposition
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
        
        //获取输出流
        OutputStream os = response.getOutputStream();
        //创建输入流
        InputStream is = new FileInputStream(realPath + "/" + fileName);
        byte[] bys = new byte[1024];
        int len = 0;
        while((len = is.read(bys)) != -1) {
            os.write(bys,0,len);
        }
        
        is.close();
            
    }


<a href="${pageContext.request.contextPath}/DownloadServlet?path=download&fileName=小熊先生.jpg" >小熊先生.jpg</a>

这样的传入中文会导致乱码

需要进行重新设置编码

String fileName = new String(request.getParameter("fileName").getBytes("ISO-8859-1"),"UTF-8");

上一篇 下一篇

猜你喜欢

热点阅读