zoukankan      html  css  js  c++  java
  • 第十一章节-上传文件

    在Spring MVC中处理文件上传有两种方法:

    (1)使用Common FileUp元件。

    (2)使用Servlet 3.0和更高版本对文件上传的支持。

    一、客户端编程

    为了上传文件,要将html表格的enctype设置为multipart/form-data,表格中还要有一个类型为file的input元素,它会显示成一个按钮,点击时会打开一个选择文件的对话框。

    如下:

    <form action="action" enctype="multipart/form-data" method="post>
        选择文件<input type="file" name="filedName"/ multiple>
        <input type="submit" value="Upload"/>
    </form>
    

    在html5之前,如果要上传多个文件,就要写多个input,有了html5,只用在input中加入multiple属性。

    二、MultipartFile接口

    已经上传到Spring MVC的文件会包在一个MutlipartFile对象中,我们唯一要做的就是使用类型为MultipartFile的属性写一个domain类。

    接下来讲解怎么得到控制器中已经上传的文件。

    三、用Common FileUpload上传文件

    这里要用到两个jar文件:

    commons-fileupload.jar 

    common-io.jar

    此外还要在springmvc-servlet.xml文件中定义 multipartResolver bean 

    <bean id="multipartResolver"     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        <property name="mxcUploadSize" value="2000000"/>
    </bean>
    

    四、用common FileUpload的例子

    工程目录 

    Product文件

    public class Product implements Serializable{
    	
    	private String name ;
    	private String description ;
    	private Float price ;
    	private List<MultipartFile> images ;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getDescription() {
    		return description;
    	}
    	public void setDescription(String description) {
    		this.description = description;
    	}
    	public Float getPrice() {
    		return price;
    	}
    	public void setPrice(Float price) {
    		this.price = price;
    	}
    	public List<MultipartFile> getImages() {
    		return images;
    	}
    	public void setImages(List<MultipartFile> images) {
    		this.images = images;
    	}
    	
    	
    }

    ProductController文件

    @Controller
    public class ProductController {
    	private static final Log logger = LogFactory.getLog(ProductController.class) ;
    	
    	@RequestMapping(value ="/product_input")
    	public String inputProduct(Model model){
    		model.addAttribute("product" , new Product()) ; //什么意思 
    		return "ProductForm" ;
    	}
    	/**
    	 * ModelAttribute:将product添加到model中
    	 */
    	@RequestMapping(value="/product_save")
    	public String saveProduct(HttpServletRequest request ,@ModelAttribute Product product,
    			BindingResult bindingResult, Model model){
    		List<MultipartFile> files = product.getImages() ;
    		
    		List<String> fileNames = new ArrayList<String>() ;
    		
    		if (null!= files && files.size()>0){
    			for (MultipartFile multipartFile : files){
    				String fileName = multipartFile.getOriginalFilename() ;
    				fileNames.add(fileName) ;
    				// 这里得到的不是WebRoot下面的image文件夹,而是在tomcat里面的app11b里面的image文件夹
    				File imageFile = new File(request.getServletContext().getRealPath("/image"), fileName) ;
    				logger.info("imageFile:"+imageFile);
    				try {
    					multipartFile.transferTo(imageFile );
    					logger.info("save file");
    				} catch (Exception e) {
    					logger.info("save file failed");
    					e.printStackTrace();
    				}
    			}
    		}
    		//save product 
    		model.addAttribute("product" , product) ;
    		return "ProductDetails";
    	}
    }  

    springmvc-config.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:p="http://www.springframework.org/schema/p"
    	xmlns:mvc="http://www.springframework.org/schema/mvc" 
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.1.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">
    
    	<context:component-scan base-package="app11a.controller" />
    	
    	<mvc:annotation-driven/>
    	<mvc:resources mapping="/css/**" location="/css/" />
    	<mvc:resources mapping="/*.html" location="/" />
        <mvc:resources mapping="/image/**" location="/image/" />
    
    	<bean id="viewResolver"
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/WEB-INF/jsp/" />
    		<property name="suffix" value=".jsp" />
    	</bean>
    
        <bean id="multipartResolver"
                class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="2000000"/>
        </bean>
    
    </beans>  

    web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
    		xmlns="http://java.sun.com/xml/ns/javaee"
        	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    	    <init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/config/springmvc-config.xml</param-value>
    		</init-param>
            <load-on-startup>1</load-on-startup>    
    	</servlet>
    
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    

    ProductForm.jsp

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Add Product Form</title>
    <style type="text/css">@import url("<c:url value="/css/main.css"/>");</style>
    </head>
    <body>
    
    <div id="global">
    <form:form commandName="product" action="product_save" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>Add a product</legend>
            <p>
                <label for="name">Product Name: </label>
                <form:input id="name" path="name" cssErrorClass="error"/>
                <form:errors path="name" cssClass="error"/>
            </p>
            <p>
                <label for="description">Description: </label>
                <form:input id="description" path="description"/>
            </p>
            <p>
                <label for="price">Price: </label>
                <form:input id="price" path="price" cssErrorClass="error"/>
            </p>
            <p>
                <label for="image">Product Image: </label>
                <input type="file" name="images[0]"/>
            </p>
            <p id="buttons">
                <input id="reset" type="reset" tabindex="4">
                <input id="submit" type="submit" tabindex="5" 
                    value="Add Product">
            </p>
        </fieldset>
    </form:form>
    </div>
    </body>
    </html>
    

    ProductDetails.jsp

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Save Product</title>
    <style type="text/css">@import url("<c:url value="/css/main.css"/>");</style>
    </head>
    <body>
    <div id="global">
        <h4>The product has been saved.</h4>
        <p>
            <h5>Details:</h5>
            Product Name: ${product.name}<br/>
            Description: ${product.description}<br/>
            Price: $${product.price}
            <p>Following files are uploaded successfully.</p>
            <ol>
            <c:forEach items="${product.images}" var="image">
                <li>${image.originalFilename}
                <img width="100" src="<c:url value="/image/"/>
                ${image.originalFilename}"/>
                </li>
            </c:forEach>
            </ol>
        </p>
    </div>
    </body>
    </html>
    

      

      

     

      

  • 相关阅读:
    图片上传
    中间件
    放大镜
    JQ编写楼层效果
    AJAX,PHP,前端简单交互制作输入框效果
    AJAX中使用post,get接收发送数据的区别
    PHP内写css样式
    计算2个日期相差的月份
    react-相关技术栈之-dva/dynamic
    es6相关知识点
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4621768.html
Copyright © 2011-2022 走看看