小滴课堂-新版JavaWeb零基础到实战专题课程-12

目录

前言

第十二章 新版Javaweb核心之文件上传下载实战

第1集 新版javaweb的文件上传讲解

第2集 javaweb核心之文件下载实战


前言

小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。 随着互联网+的时代,在线教育技术越来越便捷,小滴课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。更多教程请访问xdclass.net(添加VX:xdclass99)

第十二章 新版Javaweb核心之文件上传下载实战

第1集 新版javaweb的文件上传讲解

简介:讲解Javaweb文件上传

  • javaweb文件上传

    • Web应用系统开发中,文件上传和下载功能是非常常用的功能,浏览器在上传的过程中是将文件以流的形式提交到服务器端的

  • 前端开发 1)表单的提交方法必须是post 2)需要声明是一个文件上传组件  3)必须设置表单的enctype="multipart/form-data

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>小滴课堂文件上传样例</title>
    </head>
    <body>
    ​
    <form action="<%=request.getContextPath()%>/fileUpload" method="post" enctype="multipart/form-data">
    ​
        用户名:<input type="text" name="username"/>
        头像:<input type="file" name="img">
        <input type="submit" value="提交">
    ​
    </form>
    </body>
    </html>

  • 后端开发

    @WebServlet("/fileUpload")
    @MultipartConfig
    public class FileUploadServlet extends HttpServlet {
    ​
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ​
            String username = request.getParameter("username");
    ​
            System.out.println("username="+username);
    ​
            Part part = request.getPart("img");
    ​
            //获取真实文件名称
            String header = part.getHeader("content-disposition");
            String realFileName = header.substring(header.indexOf("filename=")+10,header.length()-1);
    ​
            System.out.println("realFileName="+realFileName);
    ​
    ​
            //获取真实的文件内容
            InputStream is =  part.getInputStream();
    ​
            //web-inf目录外界不能直接访问,如果文件机密性强则放这里
            //String dir = this.getServletContext().getRealPath("/WEB-INF/file");
    ​
            String dir = this.getServletContext().getRealPath("/file");
    ​
            File dirFile = new File(dir);
    ​
            //如果目录不存在,则创建
            if(!dirFile.exists()){
                dirFile.mkdirs();
            }
    ​
            String uniqueName = UUID.randomUUID()+realFileName;
    ​
            //文件流拷贝
            //File file = new File(dir,realFileName);
    ​
            File file = new File(dir,uniqueName);
    ​
            FileOutputStream out = new FileOutputStream(file);
    ​
            byte[] buf = new byte[1024];
            int len;
    ​
            while ((len = is.read(buf))!=-1 ){
                out.write(buf,0,len);
            }
            out.close();
            is.close();
    ​
            //图片访问
            request.getRequestDispatcher("/file/"+uniqueName).forward(request,response);
        }
    }

  • 注意点:

    • 考虑上传文件存储的目录
    • 防止文件重名覆盖,防止一个目录下面出现太多文件,限制上传文件的最大值,上传的文件判断后缀名是否合法

  • 互联网公司里面的文件服务器:

    • 基本很少互联网公司把文件存储在javaweb项目里面,一个是性能,一个是成本
    • 多数是会搭建专门的文件服务器,或者使用第三方的CDN,比如阿里云的OSS, 高级架构课程会讲这块知识点

第2集 javaweb核心之文件下载实战

简介:讲解 javaweb的文件下载讲解

  • javaweb文件下载

    • 网站下载文件,这块也是很常用的,javaweb如何实现文件下载呢?
    • 只需通过超链接即可实现,就是通过超链接,在连接地址里写上文件的路径,浏览器会自动打开该文件
    • 普通的文本,图片等浏览器能直接显示内容的浏览器都能直接打开并显示
    • 如果是浏览器无法打开的文件,比如exe等浏览器就会提示你下载改文件或者使用当前系统自带的工具打开该文件
  • 后端开发

    • 客户端发送请求给服务端告诉服务端需要下载的文件,服务端读取该文件转换为输入流,在通过outputstream响应给客户端,需要设置response的头信息

      @WebServlet("/download")
      public class FileDownloadServlet extends HttpServlet {
      ​
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      ​
              //客户端传递需要下载的文件名
              String file = request.getParameter("file");
      ​
      ​
              //获取文件在我们项目中的路径,发布到tomcat的实际路径
              String path = request.getServletContext().getRealPath("/file/");
      ​
              String filePath = path+file;
      ​
              FileInputStream fis = new FileInputStream(filePath);
      ​
              response.setCharacterEncoding("UTF-8");
      ​
              //指明响应的配置信息,包含附件
              response.setHeader("Content-Disposition","attachment; filename="+file);
      ​
              //如果文件名不包含中文可以不设置该项
              //如果包含中文名,则需要设置编码,否则文件名下载后中文字符会乱码
              //getBytes指定了编码的方式,ISO-8859-1指定了解码(读取)的方式,想要转换编码,就是先编码,再解码
              //response.setHeader("Content-Disposition","attachment; filename="+new String(file.getBytes("gb2312"),"ISO-8859-1"));
      ​
              ServletOutputStream out = response.getOutputStream();
      ​
              byte[] buf = new byte[1024];
              int len;
      ​
              while ((len= fis.read(buf))!=-1){
                  out.write(buf,0,len);
              }
      ​
              out.close();
      ​
          }
      }

  • 前端开发

    <a href="<%=request.getContextPath()%>/download?file=test1.png">下载</a>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值