springMVC实现文件上传
2016-06-26 22:19
477 查看
配置:
pom
spring配置
代码实现:
REPOSITORY_PATH=E:\\0524\\taotao-upload IMAGE_BASE_URL=http://image.static.com TAOTAO_WEB_URL=http://www.static.com TAOTAO_SEARCH_URL=http://search.static.com
pom
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.taotao.manage</groupId> <artifactId>taotao-manage</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>taotao-manage-web</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.taotao.manage</groupId> <artifactId>taotao-manage-service</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp-spring</artifactId> </dependency> <!-- JSP相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency> <!-- 文件上传组件 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- 时间操作组件 --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> </dependency> </dependencies> </project>
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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 注解驱动 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg index="0" value="UTF-8"></constructor-arg><!-- 向构造函数中第几个参数传值 --> </bean> <bean class="com.taotao.common.spring.extend.messageconvertor.json.CallbackMappingJackson2HttpMessageConverter"> <property name="callbackName" value="callback"> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 扫描Controller,尽可能配置到指定的路径 --> <context:component-scan base-package="com.taotao.manage.controller"/> <!--视图解析器 --> <!-- prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> <property name="order" value="2"></property> </bean> <!-- 过滤掉所有的静态资源,把静态资源交给服务器,spirngmvc自己不处理 --> <mvc:default-servlet-handler/> <!-- 要求id必须是 multipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设定默认编码 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 设定文件上传的最大值5MB,5*1024*1024,如果一次性上传多个文件,则只的时候所有文件的总和 --> <property name="maxUploadSize" value="5242880"></property> </bean> </beans>
代码实现:
package com.taotao.manage.controller; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Date; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.fasterxml.jackson.databind.ObjectMapper; import com.taotao.manage.bean.PicUploadResult; import com.taotao.manage.service.PropertieService; /** * 图片上传 */ @Controller @RequestMapping("/pic") public class PicUploadController { private static final Logger LOGGER = LoggerFactory.getLogger(PicUploadController.class); @Autowired private PropertieService propertieService; //jackson 中的json处理工具 private static final ObjectMapper mapper = new ObjectMapper(); // 允许上传的格式 private static final String[] IMAGE_TYPE = new String[] { ".bmp", ".jpg", ".jpeg", ".gif", ".png" }; /** * 1、校验图片的后缀名 * 2、把图片保存到指定的路径 * 3、获取要访问的路径 * 4、继续判断上传的内容是否是图片,通过获取文件中的宽度和高度 * 5、返回处理结果。 * @param uploadFile * @param response * @return * @throws Exception */ @RequestMapping(value = "/upload", method = RequestMethod.POST , produces=MediaType.TEXT_HTML_VALUE) @ResponseBody public String upload(@RequestParam("uploadFile") MultipartFile uploadFile , HttpServletResponse response) throws Exception { // 校验图片格式 boolean isLegal = false; for (String type : IMAGE_TYPE) { if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) { isLegal = true; break; } } // 封装Result对象, PicUploadResult fileUploadResult = new PicUploadResult(); // 状态 fileUploadResult.setError(isLegal ? 0 : 1); // 文件新路径 String filePath = getFilePath(uploadFile.getOriginalFilename()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Pic file upload .[{}] to [{}] .", uploadFile.getOriginalFilename(), filePath); } // 生成图片的绝对引用地址propertieService.REPOSITORY_PATH String picUrl = 4000 StringUtils.replace(StringUtils.substringAfter(filePath, propertieService.REPOSITORY_PATH), "\\", "/"); //propertieService.IMAGE_BASE_URL 设置上传之后的访问路径 fileUploadResult.setUrl( propertieService.IMAGE_BASE_URL + picUrl); File newFile = new File(filePath); // 写文件到磁盘 uploadFile.transferTo(newFile); // 校验图片是否合法 isLegal = false; try { BufferedImage image = ImageIO.read(newFile); if (image != null) { fileUploadResult.setWidth(image.getWidth() + ""); fileUploadResult.setHeight(image.getHeight() + ""); isLegal = true; } } catch (IOException e) { } // 状态 fileUploadResult.setError(isLegal ? 0 : 1); if (!isLegal) { // 不合法,将磁盘上的文件删除 newFile.delete(); } //response.setContentType(MediaType.TEXT_HTML_VALUE); //返回的是json格式的字符串 return mapper.writeValueAsString(fileUploadResult); } private String getFilePath(String sourceFileName) { String baseFolder = propertieService.REPOSITORY_PATH + File.separator + "images"; Date nowDate = new Date(); // yyyy/MM/dd String fileFolder = baseFolder + File.separator + new DateTime(nowDate).toString("yyyy") + File.separator + new DateTime(nowDate).toString("MM") + File.separator + new DateTime(nowDate).toString("dd"); File file = new File(fileFolder); if (!file.isDirectory()) { // 如果目录不存在,则创建目录 file.mkdirs(); } // 生成新的文件名 String fileName = new DateTime(nowDate).toString("yyyyMMddhhmmssSSSS") + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, "."); return fileFolder + File.separator + fileName; } }
相关文章推荐
- (七)文档对象模型(DOM)(下)
- 《Java JD7 学习笔记》课后练习题2
- springMVC实现文件上传
- springmvc注解开发-数据回显
- SpringBoot入门系列:第六篇 mybatis
- Java 基础5(变量+构造方法)
- java并发之Fork/Join实例
- Eclipse下用 Gradle构建 Web Application
- Eclipse下用 Gradle构建 Web Application
- springmvc之自定义注解(annotation)
- 华为机试---路灯
- java String.split()函数的用法分析
- java类加载过程中,如果有包名、类名、方法名冲突,是怎样个情况
- eclipse自动补全的设置(自动提示)
- Intellij编译时报“java: System Java Compiler was not found in classpath” 解决办法
- Java 路径
- 设计模式二之策略模式
- java向上转型与向下转型
- 用java做出聊天工具
- Struts 2中的constant详解