zoukankan      html  css  js  c++  java
  • 6.学习springmvc的文件上传

    一.文件上传前提与原理分析

    1.文件上传必要前提:

    2.文件上传原理分析:

    3.需要引入的jar包:

    二.传统方式文件上传程序

    1.pom.xml

     1         <dependency>
     2             <groupId>commons-fileupload</groupId>
     3             <artifactId>commons-fileupload</artifactId>
     4             <version>1.3.1</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>commons-io</groupId>
     8             <artifactId>commons-io</artifactId>
     9             <version>2.4</version>
    10         </dependency>

    2.jsp:

     1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     2 <html>
     3 <head>
     4     <title>Title</title>
     5 </head>
     6 <body>
     7 
     8 <h3>文件上传</h3>
     9 <form action="user/fileupload1" method="post" enctype="multipart/form-data">
    10     选择文件:<input type="file" name="upload">
    11     <input type="submit" value="上传">
    12 </form>
    13 
    14 </body>
    15 </html>

    3.控制器方法:

     1     @RequestMapping("/fileupload1")
     2     public String fileupload1(HttpServletRequest request) throws Exception {
     3         System.out.println("文件上传...");
     4 
     5         //使用fileupload组件完成文件上传
     6         //上传文件保存位置
     7         String path = request.getSession().getServletContext().getRealPath("/uploads/");
     8         System.out.println("path:" + path);
     9         //判断该路径是否存在
    10         File file = new File(path);
    11         if (!file.exists()) {
    12             //创建该文件夹
    13             file.mkdir();
    14         }
    15 
    16         //解析request对象,获取上传文件项
    17         DiskFileItemFactory factory = new DiskFileItemFactory();
    18         ServletFileUpload upload = new ServletFileUpload(factory);
    19 
    20         //解析request
    21         List<FileItem> items = upload.parseRequest(request);
    22         //遍历
    23         for (FileItem item : items) {
    24             //判断当前item对象是否为上传的文件项
    25             if (item.isFormField()) {
    26                 //上传的是普通表单项
    27 
    28             } else {
    29                 //上传的是文件项
    30                 //获取上传文件的名字
    31                 String filename = item.getName();
    32                 String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
    33                 //把文件的名称唯一化
    34                 filename = uuid + "-" + filename;
    35                 //完成文件上传
    36                 item.write(new File(path, filename));
    37                 //删除临时文件
    38                 item.delete();
    39             }
    40         }
    41         return "success";
    42     }

    结果:

    传统文件上传成功!

    三.SpringMVC方式上传文件

    1.springmvc.xml中配置文件解析器:

    1     <!-- 配置文件解析器对象,要求id名称必须是multipartResolver ,maxUploadSize大小为字节-->
    2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    3         <property name="maxUploadSize" value="10485760"/>
    4     </bean>

    2.jsp:

    1 <h3>springMVC方式文件上传</h3>
    2 <form action="user/fileupload2" method="post" enctype="multipart/form-data">
    3     选择文件:<input type="file" name="upload">
    4     <input type="submit" value="上传">
    5 </form>

    3.控制器方法:

     1     /**
     2      * SpringMVC方式文件上传
     3      * @param request
     4      * @param upload
     5      * @return
     6      * @throws Exception
     7      *
     8      * 注:参数中的MultipartFile类型的参数名upload必须与前端表单中<input type="file" name="upload">的name相同
     9      */
    10     @RequestMapping("/fileupload2")
    11     public String fileupload2(HttpServletRequest request, MultipartFile upload) throws Exception {
    12         System.out.println("SpringMVC方式文件上传...");
    13 
    14         //使用fileupload组件完成文件上传
    15         //上传文件保存位置
    16         String path = request.getSession().getServletContext().getRealPath("/uploads/");
    17         System.out.println("path:" + path);
    18         //判断该路径是否存在
    19         File file = new File(path);
    20         if (!file.exists()) {
    21             //创建该文件夹
    22             file.mkdir();
    23         }
    24 
    25 
    26         //上传的是文件项
    27         //获取上传文件的名字
    28         String filename = upload.getOriginalFilename();
    29         String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
    30         filename = uuid + "_" + filename;
    31 
    32         //完成文件上传
    33         upload.transferTo(new File(path,filename));
    34 
    35         return "success";
    36     }

    四.SpringMVC跨服务器方式的文件上传

    在实际项目中我们会部署:应用服务器,数据库服务器,缓存和消息服务器以及文件服务器

    1.建立新项目springmvc_fileupload:

    在pom.xml中引入依赖:(不配置依赖和web.xml会导致405错误)

    1     <dependency>
    2       <groupId>org.apache.tomcat</groupId>
    3       <artifactId>tomcat-catalina</artifactId>
    4       <version>9.0.20</version>
    5     </dependency>

    修改web.xml

     1   <servlet>
     2     <servlet-name>default</servlet-name>
     3     <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
     4     <init-param>
     5       <param-name>readonly</param-name>
     6       <param-value>false</param-value>
     7     </init-param>
     8   </servlet>
     9   
    10   <servlet-mapping>
    11     <servlet-name>default</servlet-name>
    12     <url-pattern>/</url-pattern>
    13   </servlet-mapping>

    修改index.jsp

    1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2 <html>
    3 <head>
    4     <title>文件上传服务器</title>
    5 </head>
    6 <body>
    7 <h3>文件上传服务器</h3>
    8 </body>
    9 </html>

    2.设置文件上传服务器的tomcat:

    注:服务器名称不能相同,端口号不能重复或被使用, JMX端口号不能相同

    3.启动文件上传服务器的tomcat和在服务器项目中添加uploads文件夹:

    tomcat服务器目录下添加uploads目录用于保存图片:

    4.配置springmvc03项目中pom.xml:

     1         <dependency>
     2             <groupId>com.sun.jersey</groupId>
     3             <artifactId>jersey-core</artifactId>
     4             <version>1.18.1</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>com.sun.jersey</groupId>
     8             <artifactId>jersey-client</artifactId>
     9             <version>1.18.1</version>
    10         </dependency>

    jsp:

    1 <h3>跨服务器方式文件上传</h3>
    2 <form action="user/fileupload3" method="post" enctype="multipart/form-data">
    3     选择文件:<input type="file" name="upload">
    4     <input type="submit" value="上传">
    5 </form>

    控制器方法:

     1     /**
     2      * 跨服务方式文件上传
     3      * @param upload
     4      * @return
     5      * @throws Exception
     6      */
     7     @RequestMapping("/fileupload3")
     8     public String fileupload3(MultipartFile upload) throws Exception {
     9         System.out.println("跨服务方式文件上传...");
    10 
    11         //使用fileupload组件完成文件上传
    12         //上传文件保存位置
    13         String path = "http://localhost:9090/springmvc_fileupload_war/uploads/";
    14         System.out.println("path:" + path);
    15 
    16         //上传的是文件项
    17         //获取上传文件的名字
    18         String filename = upload.getOriginalFilename();
    19         String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
    20         filename = uuid + "_" + filename;
    21 
    22         //创建客户端的对象,用于和文件服务器连接
    23         Client client = Client.create();
    24 
    25         //连接文件服务器
    26         WebResource webResource = client.resource(path + filename);
    27 
    28         //上传文件
    29         webResource.put(upload.getBytes());
    30 
    31         return "success";
    32     }

    完成:

  • 相关阅读:
    C# 类型的创建
    C# 中4个访问符和8个修饰符详解
    C#命名空间详解namespace
    ContextMenuStrip 添加在窗体。点击右键不能显示问题解答
    C# 学习笔记 C#基础
    React-Navigation web前端架构
    Css animation 与 float 、flex 布局问题
    javaScript 工作必知(十一) 数组常用方法实现
    Vue 父子组件传值 props
    kafka 参数配置 1
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/11972167.html
Copyright © 2011-2022 走看看