springmvc的上传与下载

文件上传和下载

使用SpringMvc包装的解析器(CommonsMultipartResolver)进行上传控制,需要引入apache的common-fileupload组件包

1.设置表单属性

 <form action="<%=path %>/fileUpload.htm" method="post" enctype="multipart/form-data">  
   文件  <input type="file" name="myImg"/>   
</form>  

 

2.springmvc配置文件中添加文件解析器

<!--  名称必须使用  multipartResolver 因为spring容器使用名称注入 文件上传解析器-->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <!-- 限制上传文件大小 5M -->  
     <property name="maxUploadSize" value="5242880"></property>  
 </bean>  

3.action方法接收文件

@RequestMapping(value="/saveFood",method=RequestMethod.POST)  
public String saveFood(Food food,MultipartFile imageUrl) throws Exception{  
    //获取文件的名字  
    String imagename = imageUrl.getOriginalFilename();  
    //将文件名存入对象   该对象的数据用于存入数据库  
    food.setImag(imagename);  
    //设置文件的存储路径    (该路径是项目发布后的路径,便于查看是用相对路径)  
    String absPath="E:/apache-tomcat-6.0.45/webapps/sml/images/"+imagename;  
    //将文件写入设置好的路径  
    imageUrl.transferTo(new File(absPath));  
    //将对象里的数据写入数据库  
    foodSerice.saveFood(food);  
}  

springMvc使用消息转换器ByteArrayHttpMessageConverter设置文件内容为响应体,通过设置响应头ContentDisposition通知浏览器下载的附近名称

<span style="white-space:pre;"> </span>@RequestMapping(value="/download",method=RequestMethod.GET)  
    public ResponseEntity<byte[]> download(String imagePath) throws Exception{  
        //文件路径  
        String absPath="E:/apache-tomcat-6.0.45/webapps/sml/images/"+imagePath;  
        //需要下载的目录文件   
        File file = new File(absPath);  
        //设置响应头  
        HttpHeaders headers = new HttpHeaders();  
        //设置下载的文件的名称  转换文件名的编码  
        headers.setContentDispositionFormData("attachment", URLEncoder.encode(imagePath,"UTF-8"));  
        //读取目标文件为二进制数组   
        byte[] fileByte = FileCopyUtils.copyToByteArray(file);  
        //构建ResponseEntity对象  
        ResponseEntity<byte[]> re = new ResponseEntity<byte[]>(fileByte,headers,HttpStatus.CREATED);  
        //将对象返回  
        return re;  
    }  


例:上传下载

依赖jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>SpringMvcLession</groupId>
	<artifactId>SpringMvcLession</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name/>
	<description />	
	
	<dependencies>
		<!-- 导入springmvc核心配置 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- 导入jdbc的jar包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- 导入mysql的jar包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.26</version>
		</dependency>
		
		<dependency>
			<groupId>aopalliance</groupId>
			<artifactId>aopalliance</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
		  <groupId>org.aspectj</groupId>
		  <artifactId>aspectjweaver</artifactId>
		  <version>1.8.12</version>
		</dependency>
		<dependency>
		  <groupId>org.freemarker</groupId>
		  <artifactId>freemarker</artifactId>
		  <version>2.3.23</version>
		</dependency>
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.3.3</version>
		</dependency>
		
		<!-- 导入javaee的jar包 -->
		<dependency>
			<groupId>org.apache.openejb</groupId>
			<artifactId>javaee-api</artifactId>
			<version>5.0-1</version>
			<scope>provided</scope>
		</dependency>
		
		
		<dependency>
			<groupId>javax.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>1.2_04</version>
			<scope>provided</scope>
		</dependency>
		
		<!-- 导入jstl的jar包 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
			<!-- provided 默认的不会自动加载到当前项目的bin目录 -->
			<!-- compile 会自动加载到当前项目的bin目录 -->
			<scope>compile</scope>
			  
		</dependency>
		
		<!-- 导入jsp的jar包 -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>compile</scope>
		</dependency>
		
		<dependency>
			<groupId>javax.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>1.2_04</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	
	<build>
		<sourceDirectory>${basedir}/src</sourceDirectory>
		<outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
		<resources>
			<resource>
				<directory>${basedir}/src</directory>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<webappDirectory>${basedir}/WebRoot</webappDirectory>
					<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>		
		</plugins>
	</build>
	
</project>


web.xml配置文件

扫描二维码关注公众号,回复: 3990269 查看本文章
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">

	<!-- 解决乱码的配置 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<!-- 设置request 字符集 -->
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<!-- 设置response 字符集 -->
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<!-- 请求method支持 put和delete必须添加 过滤器 -->
	<filter>
		<filter-name>myFilter</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>myFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>



	<!-- springmvc配置 -->
	<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
springmvc配置(这里没有和spring配置一起使用)

<?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:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
	http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
	http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
	">
	
   <context:component-scan base-package="cn"></context:component-scan> <!-- 扫描cn所有的类 -->
   <context:property-placeholder location="classpath:/cn/et/web/jdbc.properties"/> <!-- 扫描jdbc.properties -->
   
   <!-- springmvc 配置拦截 / 所有资源都被拦截 图片无法展示  将除控制层以外的资源交回给servlet处理-->
   <mvc:default-servlet-handler/>
   
   <!-- 将springmvc注解的action交给springmvc处理 -->
   <mvc:annotation-driven></mvc:annotation-driven>
   
    <!-- 启用文件上传 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     	<!-- 限制上传文件大小 5M -->
  	 	<property name="maxUploadSize" value="5242880"></property>
    </bean>
   
   <!--连接数据库四要素 -->
   <bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 创建一个连接数据库的工具 -->
     <property name="url" value="${url}" ></property>  <!-- 添加里面的属性 -->
     <property name="username" value="${userid}" ></property>
     <property name="password" value="${password}" ></property>
     <property name="driverClassName" value="${driverClass}" ></property>
   </bean>
   
   <!-- 事务管理器  不再使用jdbc的commit和rollback 必须由事务管理器提供 -->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"></property> 
   </bean>
   
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   	   <property name="dataSource" ref="dataSource"></property> 
   </bean>
   
   <!-- 定义通知  通知的代码 spring已经实现  -->
   <tx:advice id="myAdvise"  transaction-manager="transactionManager">
   
   <!-- 设置拦截的方法 name="*" 表示除了下面的三个开头的方法其他的都拦截  read-only="true 表示只读 不进行操作"-->
	   	<tx:attributes>
	   		<tx:method name="update*" propagation="REQUIRED"/>
	   		<tx:method name="add*"/>
	   		<tx:method name="delete*"/>
	   		<tx:method name="*" read-only="true"/>
	   	</tx:attributes>
   </tx:advice>
   
   <!-- 定义一个切点  -->
   <aop:config>
   	<aop:pointcut expression="execution(* cn.*..*.service.*.*(..))" id="myPoint"/>
    <aop:advisor advice-ref="myAdvise" pointcut-ref="myPoint"/>
   </aop:config>
</beans>

前端页面-显示-下载
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'particulars.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   	<table width="100%" border="1" cellspacing="0" cellpadding="10">
          <tr align="center" valign="middle" id="TableTitle">
			<th>图片</th>
			<th>菜名</th>
			<th>价格</th>
			<th>描述</th>
		</tr>
		 <c:forEach var="idtemp" items="${requestScope.foodid}">
        	<tr class="TableDetail1">
				<td width="10%" align="left" >
					<a href="${pageContext.request.contextPath}/download?imagePath=${pageScope.idtemp.imagepath}">
						<img style='width:200px; height:100px;' src="${pageContext.request.contextPath}//images//${pageScope.idtemp.imagepath}">
					</a>
				</td>
				<td align="center">${pageScope.idtemp.foodname}</td>
				<td align="center">${pageScope.idtemp.price}</td>
				<td align="center">${pageScope.idtemp.intro}</td>
			</tr>
       </c:forEach>
     </table>
  </body>
</html>


添加-上传

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>无线点餐平台</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
	<div id="TitleArea_Title_Content">添加新菜品</div>
<!-- 主内容区域(数据列表或表单显示) -->
<div>
	<!-- 表单内容 -->
	<form action="${pageContext.request.contextPath}/addFood" method="post" enctype="multipart/form-data">
		<!-- 本段表单字段 -->
			<table cellpadding="10" cellspacing="0">
				<tr>
					<td width="80px">菜名</td>
					<td><input type="text" name="foodName" /></td>
				</tr>
				<tr>
					<td>价格</td>
					<td><input type="text" name="price" /></td>
				</tr>
				<tr>
					<td>简介</td>
					<td><textarea name="introduce" ></textarea></td>
				</tr>
				<tr>
					<td width="80px">菜品图片</td>
					<td>
						<input type="file" name="imageUrl"/> 
					</td>
				</tr>
			</table>	
		<!-- 表单操作 -->
		<div>
			<input type="submit" value="添加">
            <a href="javascript:history.go(-1);" class="FunctionButton">返回</a>
        </div>
	</form>
</div>
</body>
</html>


控制层

package cn.et.web.controller;

import java.io.File;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import com.sun.org.apache.xpath.internal.operations.Mod;

import cn.et.web.service.FoodService;
import cn.et.web.util.PageTools;

@Controller
public class FoodController {
	
	@Autowired
	FoodService service;
	
	/**
	 * 下载
	 */
	@RequestMapping(value="/download",method=RequestMethod.GET)
	public ResponseEntity<byte[]> updateFood(String imagePath) throws Exception{
		String absPath ="D:\\软件\\myeclipse\\springmvc_project\\WebRoot\\images\\"+imagePath;
		String fileName =imagePath;
		//需要下载的目标文件
		File file =new File(absPath);
		//设置响应头
		HttpHeaders hh =new HttpHeaders();
		//设置下载的文件的名称
		hh.setContentDispositionFormData("attachment", URLEncoder.encode(fileName,"UTF-8"));
		//读取目标文件为二进制数组
		byte[] fileByte =FileCopyUtils.copyToByteArray(file);
		//构建ResponseEntity对象
		ResponseEntity<byte[]> re =new ResponseEntity<byte[]>(fileByte,hh,HttpStatus.CREATED);
		return re;
	}
	
	
	/**
	 * 添加
	 */
	@RequestMapping(value="/addFood",method=RequestMethod.POST)
	public String addFood(MultipartFile imageUrl,String foodName,String price,String introduce,Model model) throws Exception{
		String fileName =imageUrl.getOriginalFilename();
		String path ="D:\\软件\\myeclipse\\springmvc_project\\WebRoot\\images\\"+fileName;
		imageUrl.transferTo(new File(path));
		service.addFood(foodName, price, introduce, fileName);
		return queryFood(foodName,1, model);
	}
	
	/**	
	 * 删除
	 */
	@RequestMapping(value="/deleteFood/{id}",method=RequestMethod.DELETE)
	public String deleteFood(@PathVariable String id , Model model) throws Exception{
		service.deleteFood(id);
		return queryFood(null,1, model);
	}
	
	/**
	 * 修改
	 */
	@RequestMapping(value="/updateFood/{id}",method=RequestMethod.POST)
	public String updateFood(@PathVariable String id,String foodname,String price,String intro,MultipartFile imagepath, Model model) throws Exception{
		String fileName =imagepath.getOriginalFilename();
		String path ="D:\\软件\\myeclipse\\springmvc_project\\WebRoot\\images\\"+fileName;
		imagepath.transferTo(new File(path));
		
		service.updateFood(id, foodname, price, intro, fileName);
		return queryFood(foodname,1, model);
	}
	
	/**
	 *查看所有信息
	 */
	@RequestMapping(value="/showFood",method=RequestMethod.GET)
	public String queryFood(String fname,Integer curPage,Model model){
		if (curPage==null) {
			curPage=1;
		}
		PageTools getqueryAll = service.getqueryAll(fname, curPage);
		model.addAttribute("foodList", getqueryAll);
		return "/detail/foodList.jsp";
	}
	
	/**
	 *查看所有信息
	 */
	@RequestMapping(value="/particulars/{id}",method=RequestMethod.GET)
	public String foodId(@PathVariable String id,Model model){
		List<Map<String, Object>> foodid = service.foodId(id);
		System.out.println(foodid);
		model.addAttribute("foodid", foodid);
		return "/detail/particulars.jsp";
	}
}



jdbc

url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
userid=root
password=88888888


上传



下载


猜你喜欢

转载自blog.csdn.net/Yang_Hui_Liang/article/details/79132876