zoukankan      html  css  js  c++  java
  • SpringMVC_文件上传

    一:文件上传

     1:创建文件上传的jsp文件(test_fileupload.jsp)

    <body>
    <from enctype="multipart/form-data" method="post" action="/upload.do">
        选择图片:<input type="file" name="photo">
        <input type="submit" value="上传">
    </from>
    </body>

     2:创建文件上传的Controller

    在上传文件的方法中添加参数 MultiparFile,该参数本身是一个接口,该接口提供了文件上传的方法

    // 获得文件名
    getOriginalFilename()
    
    // 判断是否上传了文件,如果没有选择文件上传的话,此时结果为true
    isEmpty()
    
    //获得上传文件的文件类型
    getContentType()
    
    // 将文件上传至指定目录中
    transferTo(File file)
    
    // 获取表单中input的name值
    getName()
    
    // 获取上传文件的byte数组
    getBytes()
    
    // 获取上传文件的InputStream对象
    getInputStream()

    方法中需要的另一个参数为 HttpSession,其作用是获取服务器中用来存放上传文件的路径

    package com.doaoao.comtroller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpSession;
    import java.io.File;
    
    @Controller
    public class UploadController {
        @RequestMapping("/upload.do")
        public ModelAndView upload(MultipartFile photo, HttpSession session) throws Exception{
            ModelAndView mv = new ModelAndView();
            // 判断用户是否上传文件
            if(!photo.isEmpty()){
                // 取得服务器上传的文件路径
                String path = session.getServletContext().getRealPath("/upload");
    
                // 获取文件名称
                String filename = photo.getOriginalFilename();
    
                // 限制文件的上传类型
                if("image/png".equals(photo.getContentType())){
                    File file = new File(path,filename);
                    photo.transferTo(file);
                }else{
                    // 文件上传失败时
                    mv.addObject("msg","请选择文件格式为png");
                    mv.setViewName("/upload_fail");
                    return mv;
                }
            }else{
                mv.addObject("msg","请上传一张png格式图片");
                mv.setViewName("/upload_fail");
                return mv;
            }
            // 文件上传成功时
            mv.setViewName("/upload_success");
            return mv;
        }
    } 

    3:两种文件上传方式

      # 1 使用 apache中的commons-io 和 commons-fileupload实现文件上传

      # 2 使用servlet3.0实现文件上传

    ## 第一种文件上传方式:使用 apache中的commons-io 和 commons-fileupload实现文件上传

    <!-- 导入相关jar包 -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>

    修改配置文件 springmvc.xml

    <!--注册multipartResolver,由DispatcherServlet来负责调用,id的名称必须写为 multipartResolve-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置字符编码防止文件名乱码-->
        <property name="defaultEncoding" value="utf-8"/>
        <!--设置上传文件的总大小,单位是字节b-->
        <property name="maxUploadSize" value="1048576"/>
        <!--设置单个上传文件的大小,单位是字节b-->
        <property name="maxUploadSizePerFile" value="1048576"/>
        <!--设置内存缓冲区的大小,当超过该值的时候会写入到临时目录-->
        <property name="maxInMemorySize" value="1048576"/>
        <!--设置临时目录-->
        <property name="uploadTempDir" value="tempupload"/>
        <!--默认是false,如果设置为true的话,不会将文件路径去除,在IE浏览器下上传时会将路径名也作为文件名上传-->
        <property name="preserveFilename" value="false"/>
        <!--是否使用懒加载,默认是false-->
        <property name="resolveLazily" value="true"/>
    </bean>

       上方配置文件中设置临时目录的作用:

        1:提高安全性:将文件上传到临时目录,相当于对客户端隐藏了文件真实存放的目录

        2:便于管理:当用户取消文件上传或文件上传失败时,可直接操作临时目录即可,无需对真实目录进行操作

    ## 第二种文件上传的方式:使用servlet3.0实现文件上传

    修改web.xml配置文件的内容

    <!--使用servlet3.0实现文件上传-->
    <multipart-config>
        <!--临时文件路径,临时文件路径需配置在第一行-->
        <location>/temp</location>
        <!--单个上传文件的最大值,单位是byte-->
        <max-file-size>100</max-file-size>
        <!--总上传文件的最大值-->
        <max-request-size>52428800</max-request-size>
        <!--内存缓冲区的大小,当超过该值时,会写入到临时文件中,单位是byte-->
        <file-size-threshold>1024</file-size-threshold>
    </multipart-config>

    修改配置文件 springmvc.xml

    <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
     二:上传多个文件

    1:修改jsp文件种的内容

    <from enctype="multipart/form-data" method="post" action="/upload.do">
        选择图片:<input type="file" name="photos">
        选择图片:<input type="file" name="photos">
        选择图片:<input type="file" name="photos">
        <input type="submit" value="上传">
    </from>

    2:在Controller种添加方法,方法种添加参数 MultipartFile[],并在参数前加上注解@RequestParam

    package com.doaoao.comtroller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpSession;
    import java.io.File;
    
    @Controller
    public class UploadController {
        @RequestMapping("/upload.do")
        public ModelAndView upload(@RequestParam MultipartFile[] photos, HttpSession session) throws Exception{
            ModelAndView mv = new ModelAndView();
            // 取得服务器上传的文件路径
            String path = session.getServletContext().getRealPath("/upload");
    
            for(MultipartFile photo:photos) {
                // 判断用户是否上传文件
                if (!photo.isEmpty()) {
                    // 获取文件名称
                    String filename = photo.getOriginalFilename();
    
                    // 限制文件的上传类型
                    if ("image/png".equals(photo.getContentType())) {
                        File file = new File(path, filename);
                        photo.transferTo(file);
                    } else {
                        // 文件上传失败时
                        mv.addObject("msg", "请选择文件格式为png");
                        mv.setViewName("/upload_fail");
                        return mv;
                    }
                } else {
                    mv.addObject("msg", "请上传一张png格式图片");
                    mv.setViewName("/upload_fail");
                    return mv;
                }
            }
            // 文件上传成功时
            mv.setViewName("/upload_success");
            return mv;
        }
    }

     ...

    本笔记参考自:小猴子老师教程 http://www.monkey1024.com

  • 相关阅读:
    Web服务器推送技术【转】
    [转]vs2010 中文版下载地址及可用CDKEY
    [php] sae上的一个应用框架申请通过了
    [linux] ssh WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 问题解决
    [php] 调试利器
    [javascript] 邮箱&&电话正则
    [erlang] Erlang比较运算符 (Term Comparisons)
    [vim] gvim 折行
    [linux] 查看内存型号
    [linux] mtu查看&&设置
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10693894.html
Copyright © 2011-2022 走看看