這里文件的上傳和回顯主要講是在編輯器中的
1.導入相應的jar包
<!-- 時間操作組件 --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.5</version> </dependency> <!-- Apache工具組件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <!-- 圖片上傳的依賴 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency>
2.在springMVC的配置文件中配置
<!-- 文件上傳解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="20971520"/>
</bean>
3.bean中的工具類
package com.taotao.common.bean; public class PicUploadResult { private Integer error;//判斷你上傳的文件格式是否正確 private String url;//圖片文件顯示的路徑 private String width; private String height; public Integer getError() { return error; } public void setError(Integer error) { this.error = error; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getWidth() { return width; } public void setWidth(String width) { this.width = width; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } }
4.controller層的具體應用
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.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.common.bean.PicUploadResult; import com.taotao.manage.service.PropertiesService; /** * 圖片上傳 1.引入依賴的jar包 2.在配置文件中配置文件上傳解析器 3.控制層 */ @Controller @RequestMapping("/pic") public class PicUploadController { private static final Logger LOGGER = LoggerFactory.getLogger(PicUploadController.class); @Autowired private PropertiesService propertiesService;
private static final ObjectMapper mapper = new ObjectMapper(); // 允許上傳的格式 private static final String[] IMAGE_TYPE = new String[] { ".bmp", ".jpg", ".jpeg", ".gif", ".png" }; @RequestMapping(value = "/upload", method = RequestMethod.POST) @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對象,並且將文件的byte數組放置到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); } // 生成圖片的絕對引用地址 因為我沒有配置圖片服務器. ngnix配置 String picUrl = StringUtils.replace(StringUtils.substringAfter(filePath, propertiesService.IMAGE_REPOSITORY), "\\", "/"); fileUploadResult.setUrl(propertiesService.IMAGE_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); return mapper.writeValueAsString(fileUploadResult); } private String getFilePath(String sourceFileName) { String baseFolder = propertiesService.IMAGE_REPOSITORY + 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; } }
5.在以上controller層中引入的屬性文件應用的兩種方式
屬性文件env.properties
image_repository=D:\\bigdata6\\taotao-upload image_url=http://image.taotao.com
在spring的配置文件applicationContext.xml中引入該屬性文件
<!-- 引入屬性文件 --> <context:property-placeholder location="classpath:*.properties"/>
第一種
在service層中建立PropertiesService.java
package com.taotao.manage.service; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class PropertiesService { @Value("${image_repository}") //讀取屬性文件的值 public String IMAGE_REPOSITORY; @Value("${image_url}") //讀取屬性文件的值 public String IMAGE_URL; }
在controller層中加入
@Autowired
private PropertiesService propertiesService;
第二種
要先在springMVC的配置文件中加入
<!-- 引入屬性文件 --> <context:property-placeholder location="classpath:env.properties"/>
在controller層中直接加入
@Value("${image_repository}") //讀取屬性文件的值 public String IMAGE_REPOSITORY; @Value("${image_url}") //讀取屬性文件的值 public String IMAGE_URL;