栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

第十二章 新版Javaweb核心之文件上传下载实战 第1集 新版javaweb的文件上传讲解

简介:讲解Javaweb文件上传

  • javaweb文件上传

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

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

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        小滴课堂文件上传样例
    
    
    ​
    
    ​ 用户名: 头像: ​

  • 后端开发

    @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();
      ​
          }
      }

  • 前端开发

    /download?file=test1.png">下载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024951.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号