您的位置:首页 > 编程语言 > Java开发

springmvc的上传与下载

2018-01-22 20:04 423 查看
文件上传和下载

使用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配置文件

<
f177
/span><?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

上传





下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: