zoukankan      html  css  js  c++  java
  • Java Web之下载文件

      下载的文件,不能随便的被访问,放在外面的文件夹肯定不行,url一敲就能访问了,所以我们要放在WEB-INF文件夹里面,WEB-INF文件夹只有Servlet才能访问,我们新建一个文件夹,叫download里面我放了三个文件,一个zip,一个exe,一个png,如图:

      我新建了一个JSP

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>下载文件</title>
    </head>
    <body>
    <h3>下载文件</h3>
    <a href="/download?filename=ColorPix_CHS.zip">ColorPix_CHS.zip</a><br>
    <a href="/download?filename=QQ9.0.4.exe">QQ9.0.4.exe</a><br>
    <a href="/download?filename=小女孩.png">小女孩.png</a><br>
    
    </body>
    </html>

      一个Servlet

    package com.vae.download;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    @WebServlet("/download")
    public class DownloadServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //1.检查权限,检查积分或者什么什么币,这个不讲
    
            //2.获取下载的资源文件的名称,并且进行转码,转码是为了让你的中文文件显示的时候不乱码,但是我不转码也没乱码
            String filename = req.getParameter("filename");
            filename=new String(filename.getBytes("ISO-8859-1"),"UTF-8");
            //3.从服务器中获取想下载的文件的绝对路径
            String realPath=super.getServletContext().getRealPath("/WEB-INF/download/"+filename);
            //4.告诉浏览器不要打开文件,直接下载,原因是IE6会直接打开文件,所以这个算是特意为IE6设置的
            resp.setContentType("application/x-msdownload");
            //5.设置下载文件的时候,文件名称应该是文件自己本身的名称,因为默认的下载名称的down
            String userAgent=req.getHeader("User-Agent");
            if (userAgent.contains("MSIE")) {
                //如果是IE浏览器,是这种编码格式
                filename=URLEncoder.encode(filename,"UTF-8");
            }else {
                //非IE浏览器,是这种编码格式
                filename=new String(filename.getBytes("UTF-8"),"ISO-8859-1");
            }
            resp.setHeader("Content-Disposition","attachment;filename="+filename);
            //6.下载文件
            Files.copy(Paths.get(realPath),resp.getOutputStream());
    
        }
    }

      需要讲解的都在注释里面了

      

  • 相关阅读:
    Git版本控制+配置中心(Spring Cloud Config)(八)
    NodeJS+Sidecar异构系统+Zuul(七)
    API网关Zuul(六)
    Hystrix断路器(五)
    Feign配合Ribbon和Eureka来提供负载均衡的HTTP客户端(四)
    负载均衡Ribbon(三)
    Eureka注册中心(二)
    SpringCloud介绍(一)
    Swift基础小结_2
    谓词(搜索)
  • 原文地址:https://www.cnblogs.com/yunquan/p/10300774.html
Copyright © 2011-2022 走看看