zoukankan      html  css  js  c++  java
  • 使用MultipartFile上传文件

    转载地址:https://www.cnblogs.com/lunaticcoder/p/9813483.html(具体的看这个这个大佬的博客)

    依赖包:

    <!-- 上传文件依赖组件 -->
    <!-- 这两个依赖要一起使用-->
    <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency>

    前端在提交的时候也需要修改.form表单提交默认是application/x-www-form-urlencoded而上传文件把文件用2进制的方式传输,默认的格式已经满足不了需求,就需要使用multipart/form-data格式来发送接收。

    1. 在form中加入 enctype="multipart/form-data"

    1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
    2      <input type="file" name="meFile" /><p>
    3      <input type="submit" value="提交" /><p>
    4      <input type="reset" value="清空" /><p>
    5 </form>

    2.上传多文件的话,需在表单的input中加入multiple="multiple"。(可一次选择多个文件)

    1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
    2         <input type="file" name="meFile" multiple="multiple" /><p>
    3         <input type="submit" value="提交" /><p>
    4         <input type="reset" value="清空" /><p>
    5 </form>

    3.上传文件夹的话,需在表单input中加入webkitdirectory directory。(仅可以选择文件夹,文件夹内的文件也能成功上传)

    1 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
    2         <input type="file" name="meFile" multiple="multiple" webkitdirectory directory /><p>
    3         <input type="submit" value="提交" /><p>
    4         <input type="reset" value="清空" /><p>
    5 </form>

    后端代码

    单文件上传

     1 @RequestMapping("/upload_theme.do")//上传主题
     2     public String UploadTheme(MultipartFile meFile,Model model){
     3         if (meFile != null) {
     4             System.out.println(meFile.getContentType());//在控制台打印文件的类型
     5             System.out.println(meFile.getName());//返回文件的名称
     6             System.out.println(meFile.getOriginalFilename());//返回文件的原文件名
     7             try {
     8                 meFile.transferTo(new File("G:/temp/"+UUID.randomUUID()+meFile.getOriginalFilename()));
     9             } catch (IllegalStateException e) {
    10                 e.printStackTrace();
    11                 model.addAttribute("msg", "上传失败");
    12                 return "/error.jsp";
    13             } catch (IOException e) {
    14                 e.printStackTrace();
    15                 model.addAttribute("msg", "上传失败");
    16                 return "/error.jsp";
    17             }
    18         }
    19         model.addAttribute("msg", "上传成功");
    20         return "index";
    21     }

    多文件上传

     1 @RequestMapping("/upload_theme.do")//上传主题
     2     public String UploadTheme(HttpServletRequest request,Model model){
     3         CommonsMultipartResolver cResolver = new CommonsMultipartResolver();
     4         if (cResolver.isMultipart(request)) {//判断是不是Multipart格式的数据
     5             MultipartHttpServletRequest httpservletrequest = (MultipartHttpServletRequest) request;//将文件格式的请求装入MultipartHttpServletRequest对象中。
     6             List<MultipartFile> list = httpservletrequest.getFiles("meFile");//通过调用该方法取出文件到list
     7             for (int i = 0; i < list.size(); i++) {
     8                 System.out.println(list.get(i).getOriginalFilename());
     9                 System.out.println(list.get(i).getContentType());
    10                 try {
    11                     list.get(i).transferTo(new File("G:/temp/"+UUID.randomUUID()+list.get(i).getOriginalFilename()));
    12                 } catch (IllegalStateException e) {
    13                     e.printStackTrace();
    14                     model.addAttribute("msg", "上传失败");
    15                     return "/error.jsp";
    16                 } catch (IOException e) {
    17                     e.printStackTrace();
    18                     model.addAttribute("msg", "上传失败");
    19                     return "/error.jsp";
    20                 }
    21             }
    22         }
    23         model.addAttribute("msg", "上传成功");
    24 
    25         return "index";
    26     }

    Spring的xml文件配置如下

     1  <!-- Spring MVC -->
     2    
     3         <!-- 配置组件扫描 -->
     4         <context:component-scan 
     5             base-package="export.controller" />
     6             
     7         <!-- 配置ViewResolver -->
     8         <bean 
     9             class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    10             <property name="prefix" 
    11                 value="/web/" />
    12             <property name="suffix" 
    13                 value=".jsp" />
    14         </bean>
    15         <bean id="multipartResolver"  
    16             class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    17             <!-- 上传文件大小上限,单位为字节(10MB) -->
    18             <property name="maxUploadSize">  
    19                 <value>10485760</value>  
    20             </property>  
    21             <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
    22             <property name="defaultEncoding">
    23                 <value>UTF-8</value>
    24             </property>
    25             </bean>
    26         <!-- 注解驱动 -->
    27         <mvc:annotation-driven />

    以及MultipartFile对象中的常用方法如下:

    byte[] getBytes():获取文件数据
    String getContentType[]:获取文件MIME类型,如image/jpeg等
    InputStream getInputStream():获取文件流
    String getName():获取表单中文件组件的名字
    String getOriginalFilename():获取上传文件的原名
    Long getSize():获取文件的字节大小,单位为byte
    boolean isEmpty():是否有上传文件
    void transferTo(File dest):将上传文件保存到一个目录文件中

    非常感谢@花裤都派大星 原谅我转载了你的帖子

    也可以看看这些博客:https://blog.csdn.net/qian_ch/article/details/69258465

              https://www.cnblogs.com/WJ-163/p/6269409.html

  • 相关阅读:
    C#2008与.NET 3.5 高级程序设计读书笔记(6)继承和多态
    C#2008与.NET 3.5 高级程序设计读书笔记(5)定义封装的类类型
    C#2008与.NET 3.5 高级程序设计读书笔记(10) 集合与泛型
    C#2008与.NET 3.5 高级程序设计读书笔记(8)对象的生命周期
    Jquery1.4.1 学习
    JavaScript高级程序设计(第2版) 之 JavaScript的传值方式
    解密宝典——十招教你学会软件破解(转载收藏)
    使用sql server中的全文索引( 转 )
    JavaScript高级程序设计(第2版) 之 JavaScript变量作用域
    .NET读取Excel数据为null的解决办法
  • 原文地址:https://www.cnblogs.com/zuoxh/p/9815494.html
Copyright © 2011-2022 走看看