zoukankan      html  css  js  c++  java
  • MultipartFile(文件的上传)--CommonsMultipartResolver

    一 : applicationContext.xml中:必须声明不然获取不到
    <!-- 上传文件的配置 -->
    <bean
    id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    
    <property name="maxUploadSize" value="1024000"></property>
    
    <property name="defaultEncoding" value="utf-8"/><!--属性:编码-->
    </bean>
    
    二 : 前台jsp页面
    <!-- //存放选择文件的 图片按钮的 Div -->
    <div id="uploadfileQueue"></div>
    <input type="file" id="file_upload">
    <img id="add_img" width="100" height="100"/>
    <input type="text" name="user_img" >
    
    三 : js代码:
    $(document).ready(function() {
    
    $("#file_upload").uploadify({
    
    //是否自动上传 true or false
    'auto':true,
    //超时时间上传成功后,将等待服务器的响应时间。
    //在此时间后,若服务器未响应,则默认为成功(因为已经上传,等待服务器的响应) 单位:秒
    'successTimeout':99999,
    //附带值 JSON对象数据,将与每个文件一起发送至服务器端。
    //如果为动态值,请在onUploadStart()中使用settings()方法更改该JSON值
    /* 'formData':{ //可以不写
    'user.username':'',
    'user.age':''
    }, */
    'onUploadStart': function(file) { 
    
    $("#file_upload").uploadify(
    "settings"
    );
    /* {'user.username':name,'user.age':age});*/
    }, 
    //flash
    'swf': "<%=request.getContextPath()%>/uploadify/uploadify.swf",
    //文件选择后的容器div的id值 
    'queueID':'uploadfileQueue',
    //将要上传的文件对象的名称 必须与后台controller中抓取的文件名保持一致 
    'fileObjName':'headerImage',
    //上传地址访问后台action路径
    'uploader':'<%=request.getContextPath()%>/photosAction/uploadFile.do',
    
    //浏览将要上传文件按钮的背景图片路径
    //'buttonImage':'<%=request.getContextPath()%>/uplodify/background.jpg',
    
    //浏览按钮的宽度
    'width':'100',
    
    //浏览按钮的高度
    'height':'32',
    
    //在浏览窗口底部的文件类型下拉菜单中显示的文本
    'fileTypeDesc':'支持的格式:',
    
    //允许上传的文件后缀
    'fileTypeExts':'*.jpg;*.jpge;*.gif;*.png', //有哪些??
    
    /*上传文件的大小限制允许上传文件的最大 大小。 这个值可以是一个数字或字 符串。
    如果它是一个字符串,它接受一个单位(B, KB, MB, or GB)。
    默认单位为KB您可以将此值设置为0 ,没有限制, 
    单个文件不允许超过所设置的值 如果超过 onSelectError时间被触发*/
    'fileSizeLimit':'1024KB',
    'buttonText': '上传头像',
    //允许上传的文件的最大数量。当达到或超过这个数字,onSelectError事件被触发。
    'queueSizeLimit' : -1,
    
    //选择上传文件后调用
    'onSelect' : function(file) {
    // alert("123"); 
    },
    //返回一个错误,选择文件的时候触发
    'onSelectError':function(file, errorCode, errorMsg){
    switch(errorCode) {
    case -100:
    alert("上传的文件数量已经超出系统限制的"
    +$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!");
    break;
    
    case -110:
    alert("文件 ["+file.name+"] 大小超出系统限制的"
    +$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!");
    break;
    
    case -120:
    alert("文件 ["+file.name+"] 大小异常!");
    break;
    
    case -130:
    alert("文件 ["+file.name+"] 类型不正确!");
    break;
    }
    },
    //上传到服务器,服务器返回相应信息到data里
    'onUploadSuccess':function(file, data, response){
    //alert(data);
    $("#add_img").attr("src","<%=request.getContextPath()%>/"+data)
    //alert("<%=request.getContextPath()%>/"+data)
    $("[name='user_img']").val(data)
    },
    //当单个文件上传出错时触发
    'onUploadError': function (file, errorCode, errorMsg, errorString) { 
    alert("上传失败");
    } 
    });
    
    });
    四 ; controller: 
    @RequestMapping(value="/uploadFile",method=RequestMethod.POST)
    @ResponseBody
    public void uploadFile(@RequestParam("headerImage")CommonsMultipartFile headerImage,HttpServletRequest req,HttpServletResponse response) throws IOException{
    
    String path = FileUtil.upFile(headerImage,req,response,"pppp");
    try {
    response.setCharacterEncoding("utf-8");
    response.getWriter().write(path);
    
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    
    注意:有时候需要使用到File类型的文件
    那么就需要将CommonsMultipartFile 类型的转换为
    File类型的
    
    DiskFileItem fi = (DiskFileItem)image.getFileItem(); 
    File file = fi.getStoreLocation();
    
    
    二 : 使用MultipartFile上传文件(多文件)
    Controller层:
    @RequestMapping("filesUpload")
    public String filesUpload(@RequestParam("files") MultipartFile[] files) {
    //判断file数组不能为空并且长度大于0
    if(files!=null&&files.length>0){
    //循环获取file数组中得文件
    for(int i = 0;i<files.length;i++){
    MultipartFile file = files[i];
    //保存文件
    saveFile(file);
    }
    }
    // 重定向
    return "redirect:/list.html";
    }
    上传文件
    private boolean saveFile(MultipartFile file) {
    // 判断文件是否为空
    if (!file.isEmpty()) {
    try {
    // 文件保存路径
    String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
    + file.getOriginalFilename();
    // 转存文件
    file.transferTo(new File(filePath));
    return true;
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    return false;
    }
    SpringMVC 中,文件的上传,是通过 MultipartResolver 实现的。 所以,如果要实现文件的上传,只要在 spring-mvc.xml 中注册相应的 MultipartResolver 即可。
    
    MultipartResolver 的实现类有两个:
    
    CommonsMultipartResolver
    StandardServletMultipartResolver
    两个的区别:
    
    第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,但它能在比较旧的 servlet 版本中使用。
    第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,但是只能在 Servlet 3 以上的版本使用。
    第一个使用步骤:
    
    /*CommonsMultipartResolver  上传用到的两个包*/
    
    "commons-fileupload:commons-fileupload:1.3.1",
    
    "commons-io:commons-io:2.4"
    Spring_mvc.xml
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
       <!-- 开启mvc-->
        <mvc:annotation-driven/>
    
        <!-- 配置扫描发现所有具有 @Controller 注解的类,加载到容器 -->
        <context:component-scan base-package="text1"/>
    
    
        <bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/view/" />
            <property name="suffix" value=".jsp"/>
        </bean>
    
    
        <!--1 CommonsMultipartResolver
        第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,
        但它能在比较旧的 servlet 版本中使用-->
    
        <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
        <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>
    
    </beans>
     
    
     
    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>mvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:Spring_mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    
    
        
    
        </servlet>
        
        <servlet-mapping>
            <servlet-name>mvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    
     
    
    imgTest .java
    java
    
    package text1;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.IOException;
    
    @Controller
    @RequestMapping("/create")
    public class imgTest {
    
    @Autowired
    private HttpServletRequest request;
    
    
        @RequestMapping("/jq")
        public String jq() {
            System.out.println("oooo");
            return "index";
        }
    
        @RequestMapping("/upload")
        public String upload(MultipartFile[] mfile) throws IOException {
    
            if (mfile !=null && mfile.length>0) {
                for (int i = 0;i<mfile.length;i++){
                    long start = System.currentTimeMillis();
                    System.out.println("-------------------------------------------------");
                    System.out.println("获取文件流"+mfile[i].getInputStream());
                    System.out.println("获取文件的字节大小【byte】"+mfile[i].getSize());
                    System.out.println("文件类型"+mfile[i].getContentType());
                    System.out.println("获取文件数据"+mfile[i].getBytes());
                    System.out.println("文件名字"+mfile[i].getName());
                    System.out.println("获取上传文件的原名"+mfile[i].getOriginalFilename());
    
                    System.out.println("-------------------------------------------------");
    
                    try {
                        String filePath = request.getSession().getServletContext()
                                .getRealPath("/") + "assets/" +start+ mfile[i].getOriginalFilename();
    
                        //转存文件
    
                        mfile[i].transferTo(new File(filePath));
                    }catch (Exception e){
                        e.printStackTrace();
                    }
    
                    //mfile[i].transferTo(new File("D:/ideas/"+mfile[i].getOriginalFilename()+ mfile[i].getOriginalFilename().substring(
                         //   mfile[i].getOriginalFilename().lastIndexOf("."))));
                    // System.out.println(mfile.getOriginalFilename());
                  //  mfile[i].transferTo(new File("/assets" + mfile[i].getOriginalFilename()));
    
    
                } return "cg";
    
            } else {
                System.out.println("失败");
                return "sb";
            }
        }
    }
    
     
    
    html:
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    
        <title>Title</title>
    </head>
    <body>
    <form:form action="/create/upload" enctype="multipart/form-data">
        <input type="file" name="mfile" id="img" /><br>
        <input type="file" name="mfile"  id="img2"/>
        <%--<img src="#" id="ser" >--%>
        <input type="submit" value="上传图片" />
    </form:form>
    
    </body>
    </html>
    
     
    
    
    
     
    
    
    第二个使用步骤: 这个就不要导包---建议用这个 
    
     
    
    Spring_mvc.xml
    
    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
       <!-- 开启mvc-->
        <mvc:annotation-driven/>
    
        <!-- 配置扫描发现所有具有 @Controller 注解的类,加载到容器 -->
        <context:component-scan base-package="text1"/>
    
    
        <bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/view/" />
            <property name="suffix" value=".jsp"/>
        </bean>
    
    
     
    
    
            <!--2 注册上传  StandardServletMultipartResolver
            第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,
            但是只能在 Servlet 3 以上的版本使用。
            -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
    
        </bean>
    
    
    </beans>
    
    
    
    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>mvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:Spring_mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    
    
            <multipart-config>
                <!-- 上传文件的大小限制,比如下面表示 5 M -->
                <max-file-size>5242880</max-file-size>
                <!-- 一次表单提交中文件的大小限制,必须下面代表 10 M -->
                <max-request-size>10485760</max-request-size>
                <!-- 多大的文件会被自动保存到硬盘上。0 代表所有 -->
                <file-size-threshold>0</file-size-threshold>
            </multipart-config>
    
        </servlet>
        
        <servlet-mapping>
            <servlet-name>mvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
     
    
    其他的都是一样的。
    
    imgTest .java  和html 这个代码都是和上面的不变!
  • 相关阅读:
    html5+css3兼容问题小结
    webkit滚动条样式设置
    rem彻底研究
    四月、五月开发总结
    php oci8 小试
    oracle创建dblink
    php 页面参数过多时自动拼接get参数的函数
    Oracle Database 11g Express Edition 使用小结(windows)
    php sortable 动态排序
    php动态生成一个xml文件供swf调用
  • 原文地址:https://www.cnblogs.com/gaomanito/p/10322714.html
Copyright © 2011-2022 走看看