• SpringMVC 学习笔记(文件的上传和下载)


      在web项目中会遇到的问题:文件上传

      文件上传在前端页面的设置:form表单 设置 input 类型

        文件上传的请求方式要使用post,要将enctype设置为multipart/form-data   ;  Input的类型设为file

    <form action="UploadServlet" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit">
    </form>

    1、  使用CommonsMultipartResolver方式上传文件

        所需的第三方依赖

          commons-fileupload:commons-fileupload:1.3.1

          commons-io:commons-io:2.4

        在SpringMVC.xml 文件中配置文件处理 对象

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8" />
            <property name="maxUploadSize" value="10485760000" />
            <property name="maxInMemorySize" value="40960" />
    </bean>

        然后在Controller的处理方法中:通过MultipartFile或者CommonsMultipartFile类型参数来接收客户端发送的文件数据,通过其transferTo方法写文件

    @RequestMapping("/upload.action")
        public String upload(Model model,MultipartFile file){
        //查看得到文件的相关属性 // if(file!=null){ // System.out.println(file.getContentType()); // System.out.println(file.getOriginalFilename()); // System.out.println(file.getSize()); // model.addAttribute("file", file.getOriginalFilename()); // } try { file.transferTo(new File("D:/"+UUID.randomUUID()+".jpg"));//用file.transferTo("fileURL")方法来对上传文件进行存储 } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "index"; }

    2、使用StandardServletMultipartResolver方式文件上传,使用的servlet3.0文件上传的技术,不需要使用第三方包

      文件处理器的配置(SpringMVC中)

    <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/> 

      文件上传的相关设置 在 web.xml中设置

    <multipart-config> 
        <max-file-size>5242880</max-file-size> <!--单个文件最大大小:5MB-->
        <max-request-size>20971520</max-request-size> <!--所有文件最大大小:20MB-->
       <file-size-threshold>0</file-size-threshold> <!-- 超过这个大小直接存硬盘,而不是内存 -->
     </multipart-config>

      请求的处理方法

        通过request获取Part,通过Part的write方法写文件(保存文件)

    @RequestMapping("/upload2.action")
        public String upload2(HttpServletRequest request){
            try {
                //从request中获取part
                List<Part> parts = (List<Part>) request.getParts();
                //每一个part可以对每一个上传的文件进行处理
                Part part = parts.get(0);
                //通过part存储文件
                part.write("D:/"+UUID.randomUUID());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ServletException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return "index";
        }

    3、多文件上传

      

    @RequestMapping("/upload.action")
        public String upload(Model model,MultipartFile[] files){

          for (MultipartFile multipartFile : multipartFiles) {  

                    System.out.println(multipartFile.getName() + "-----" + multipartFile.getOriginalFilename());  

                    ModelMap uploadOne = uploadOne(multipartFile); //调用单个文件的处理方法 

             }  

    }    
  • 相关阅读:
    Leetcode-645 Set Mismatch
    2017百度软研(C++)
    二叉树中任意两个节点的最近公共祖先
    不用加减乘除做加法
    一些leetcode算法题
    Leetcode 98. Validate Binary Search Tree
    C++ 通过ostringstream 实现任意类型转string
    Leetcode 215. Kth Largest Element in an Array
    382. Linked List Random Node
    一些基础函数的实现
  • 原文地址:https://www.cnblogs.com/lhblogs/p/7489707.html
Copyright © 2020-2023  润新知