SpringMVC框架|商品圖片上傳


需求分析

很多時候需要上傳圖片,那麼圖片該如何存儲呢?應該將圖片的路徑存儲到數據庫圖片本身應該通過IO流寫到磁盤上或服務器上,本次演示存儲在服務器上,但是在真正的企業開發中,都是會有一個單獨的服務器專門用來存儲圖片。

關於圖片的上傳要做下面幾點:

  • 編寫商品添加頁面.jsp
  • 編寫handler處理器
  • 導文件上傳需要的jar包
  • 在SpringMVC的配置文件中添加上傳解析器

1.商品添加頁面

簡單書寫一個商品添加頁面,點擊添加商品後跳轉到處理器的"/product/upload.do"路徑中。

在這裏插入圖片描述

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>
	<meta http-equiv="Content-Type" content="text/html,charset=utf-8"/>
	<title>添加商品頁面</title>
  </head>
  
  <body>
  	<form action='<c:url value="/product/upload.do"/>' method="post" enctype="multipart/form-data">
  		商品名稱:<input type="text" name="name"/><br/>
  		上傳圖片:<input type="file" name="uploadFile"><br/>
  		<input type="submit" value="添加商品"/>
  	</form>  
  </body>
</html>

2.handler處理器

當請求轉發到handler處理器,增強方法後再轉發到index.jsp頁面。

package com.gql.upload;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
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 com.gql.pojo.Product;

@Controller
@RequestMapping("/product")//此處是爲了提升安全性
public class ProductController {
	
	@RequestMapping("/upload")
	public String upload(HttpServletRequest request,Product product,@RequestParam("uploadFile") MultipartFile file) throws IllegalStateException, IOException{
		//獲取要上傳的文件名
		String fileName = file.getOriginalFilename();
		//獲取文件要上傳到的項目路徑
		String realPath = request.getServletContext().getRealPath("/img");
		//將文件名標記唯一
		String newPath = new Date().getTime() + fileName;
		File dest = new File(realPath+ "/" +newPath);
		file.transferTo(dest);
		//存儲最終路徑到pojo,爲存入數據庫做準備
		product.setPic("/img/" + newPath);
		//存入最終路徑到request作用域
		request.setAttribute("product", product);
		return "index";
	}
}

3.最終跳轉到的頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
	<meta http-equiv="content-type" content="text/html,charset=utf-8"/>
	<title>Insert title here</title>
  </head>
  
  <body>
    	圖片添加成功!
    	<img alt="" src="${pageContext.request.contextPath}/${product.pic}">
  </body>
</html>

4.SpringMVC配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop.xsd 
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
	
	<!-- 處理器(手寫) -->
	<context:component-scan base-package="com.gql.upload"></context:component-scan>
	
	<!-- 代替處理器映射器和處理器適配器 -->
	<mvc:annotation-driven/>

	<!-- 視圖解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/product/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	
	<!-- 文件上傳解析器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- maxUploadSize:文件上傳最大字節 524880=5兆-->
		<property name="maxUploadSize" value="5242880"></property>
		<!--maxInMemorySize:如果小於8兆存入內存,大於8兆存入磁盤 -->
		<!--  <property name="maxInMemorySize" value="8388608‬"></property>-->
		<!-- 默認編碼集 -->
		<property name="defaultEncoding" value="utf-8"></property>
	</bean>
</beans>

5.產品的pojo

package com.gql.pojo;
/**
 * 類說明:
 *		Product_pojo
 * @guoqianliang1998.
 */
public class Product {
	private Integer id;
	private String name;
	private String pic;
	//省略set和get方法

6.前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>SpringMVC01</display-name>
	<!-- 解決dopost請求亂碼問題 -->
	<filter>     
	  	<filter-name>encodingFilter</filter-name> 
	  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	  	<init-param>
	  		<param-name>encoding</param-name>
	  		<param-value>UTF-8</param-value>
	  	</init-param>                
     	<init-param>
     		<!--如果已經指定了字符集是否還使用SpringMVC指定的字符集  -->
	  		<param-name>forceEncoding</param-name>
	  		<param-value>true</param-value>
	  	</init-param>   
  	</filter>        
  	<filter-mapping>                
  		<filter-name>encodingFilter</filter-name> 
  		<url-pattern>/*</url-pattern>       
  	</filter-mapping>
	
	<!-- 前端控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 加載SpringMVC配置文件 -->
		<init-param>
				<param-name>contextConfigLocation</param-name>
				<param-value>classpath:springmvc_upload.xml</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- 
			*.do,*.action : 請求的url以.do或.action結尾,都會被SpringMVC框架所解析.
			/ : 所有的請求都會被pringmvc所解析,會造成靜態資源無法訪問.支持RestFul開發風格.
			/* : 攔截所有請求,JSP也會被springmvc解析,造成JSP無法訪問.不要使用這種方式	
		-->
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>

7.項目結構與jar包

在這裏插入圖片描述

在這裏插入圖片描述

8.測試商品圖片上傳

在測試頁面選擇圖片進行上傳
在這裏插入圖片描述
圖片添加成功!
在這裏插入圖片描述
成功在服務器的img文件夾下添加了圖片。

在這裏插入圖片描述

發佈了422 篇原創文章 · 獲贊 1121 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章