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

    依赖

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>
    

    CommonsMultipartResolver配置(spring-mvc.xml)

    <!-- 定义文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设定默认编码 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
        <property name="maxUploadSize" value="5242880"></property>
        <!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
        <property name="maxInMemorySize" value="40960"></property>
        <!-- 上传文件的临时路径 -->
        <property name="uploadTempDir" value="fileUpload/temp"></property>
        <!-- 延迟文件解析 -->
        <property name="resolveLazily" value="true"/>
    </bean>
    

    前端Jsp

    <form action="/upload" method="post" enctype="multipart/form-data">  
        多文件上传注意 file 的 name 值不能重复
        <input type="file" name="file1" />
        <input type="file" name="file2" />
        <input type="submit" value="Submit" />
    </form> 
    

    MultipartResolver

    MultipartResolver 用于处理文件上传。
    
    当收到请求时,DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。
    
    如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,
    然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller
    
    MultipartResolver 是一个接口,它的实现类分为 CommonsMultipartResolver 类和 StandardServletMultipartResolver 类。
    
    MultipartFile 封装了请求数据中的文件,此时这个文件存储在内存中或临时的磁盘文件中,
    需要将其转存到一个合适的位置,因为请求结束后临时存储将被清空。
    
    在 MultipartFile 接口中有如下方法:
        String getName();     // 获取参数的名称
        String getOriginalFilename();     // 获取文件的原名称
        String getContentType();     // 文件内容的类型
        boolean isEmpty();     // 文件是否为空
        long getSize();     // 文件大小
        byte[] getBytes();     // 将文件内容以字节数组的形式返回
        InputStream getInputStream();     // 将文件内容以输入流的形式返回
        void transferTo(File dest);     // 将文件内容传输到指定文件中
    

    Controller

        @RequestMapping("/upload")
        public String upload(HttpServletRequest request) throws Exception {
    
            // 创建一个通用的多部分解析器
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                    request.getSession().getServletContext());
    
            //判断 request 是否有文件上传,即多部分请求  
            if (multipartResolver.isMultipart(request)) {
    
                //转换成多部分request    
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
    
                //取得request中的所有文件名  
                Iterator<String> iter = multiRequest.getFileNames();
    
                while (iter.hasNext()) {
    
                    //取得上传文件  
                    MultipartFile file = multiRequest.getFile(iter.next());
    
                    //对上传文件进行处理  
                    if (!file.isEmpty()) {
    
                        //上传图片至此路径下
                        String path = "D://images//";
    
                        //获取文件名
                        String fileName = file.getOriginalFilename();
    
                        File targetFile = new File(path, fileName);
                        if (!targetFile.exists()) {
                            targetFile.mkdirs();
                        }
    
                        //保存
                        try {
                            file.transferTo(targetFile);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            return "success";
        }
    
  • 相关阅读:
    Linux VPS新硬盘分区与挂载教程
    全程图解 手把手教您开启windows终端服务
    解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法
    Nginx 配置文件详解
    MySQL新建用户,授权,删除用户,修改密码
    解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法
    CentOS 6.4 32位系统 LAMP(Apache+MySQL+PHP)安装步骤
    yum被锁Another app is currently holding the yum lock; waiting for it to exit...
    CentOS 6.4下编译安装MySQL 5.6.14
    Oracle函数大全
  • 原文地址:https://www.cnblogs.com/loveer/p/11360243.html
Copyright © 2011-2022 走看看