上传图片
package com.xxxxxx.manager.controller; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import org.apache.commons.lang3.StringUtils; import org.csource.fastdfs.ClientGlobal; import org.csource.fastdfs.StorageClient; import org.csource.fastdfs.StorageServer; import org.csource.fastdfs.TrackerClient; import org.csource.fastdfs.TrackerServer; 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.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.fasterxml.jackson.databind.ObjectMapper; import com.taotao.common.pojo.PicUploadResult; @Controller @RequestMapping("pic/upload") public class PicUploadController { // 声明Jackson工具类,要用到3个功能:1.对象转json;2.json转对象;3.直接解析json private static final ObjectMapper MAPPER = new ObjectMapper(); @Value("${XXXXXX_IMAGE_PATH}") private String XXXXXX_IMAGE_PATH; // 声明哪些类型的文件可以上传 private String[] TYPE = { ".jpg", ".gif", ".jpeg", ".bmp", ".png" }; // filePostName : "uploadFile", //图片上传的参数的名字 // uploadJson : '/rest/pic/upload', //上传图片的请求地址 @RequestMapping(method = RequestMethod.POST, produces = MediaType.TEXT_HTML_VALUE) @ResponseBody public String upload(MultipartFile uploadFile) throws Exception { // 声明返回值PicUploadResult PicUploadResult picUploadResult = new PicUploadResult(); // 默认设置上传失败0上传成功,1代表上传失败 picUploadResult.setError(1); // 设置标识位,校验的时候使用,默认校验失败 boolean flag = false; // 校验文件类型,就是校验后缀 for (String type : TYPE) { // 判断是否是要求的后缀结尾 if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) { // 设置标识位为true flag = true; // 跳出循环 break; } } // if(flag ==false){ if (!flag) { // 如果校验失败直接返回 // return picUploadResult; // 使用Jackson工具类,把对象转json数据返回 String json = MAPPER.writeValueAsString(picUploadResult); return json; } // 校验成功,进行下一轮校验,重置标识位为false flag = false; // 校验文件内容,就是校验宽和高 try { BufferedImage image = ImageIO.read(uploadFile.getInputStream()); if (image != null) { // 设置宽和高 picUploadResult.setHeight("" + image.getHeight()); picUploadResult.setWidth(String.valueOf(image.getWidth())); // 执行到这里没有问题,表示校验成功 flag = true; } } catch (Exception e) { // 不处理异常,因为这里是校验,如果有异常代表校验失败,不上传就可以了 } // 如果校验成功,则执行图片上传 // if(flag == true){ if (flag) { // 上传图片 // 初始化上传 ClientGlobal.init(System.getProperty("user.dir") + "/src/main/resources/tracker.conf"); // 获取TrackerClient TrackerClient trackerClient = new TrackerClient(); // 获取TrackerServer TrackerServer trackerServer = trackerClient.getConnection(); // 声明StorageServer StorageServer storageServer = null; // 创建StorageClient StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 执行上传图片,返回字符串数组 1.2.3.4.jpg String extName = StringUtils.substringAfterLast(uploadFile.getOriginalFilename(), "."); String[] str = storageClient.upload_file(uploadFile.getBytes(), extName, null); // 拼接图片上传成功的url地址 String picUrl = this.XXXXXX_IMAGE_PATH + str[0] + "/" + str[1]; // 设置返回的数据 // 设置图片url picUploadResult.setUrl(picUrl); // 设置图片上传成功error为0 // 0上传成功,1代表上传失败 picUploadResult.setError(0); } // return picUploadResult; // 使用Jackson工具类,把对象转json数据返回 String json = MAPPER.writeValueAsString(picUploadResult); return json; } }
env.properties :
#配置图片服务器的地址
XXXXXX_IMAGE_PATH=http://192.168.37.161/
tracker.conf :
tracker_server=192.168.37.161:22122
springmvc.xml :
<!-- 配置上传解析器 -->
<!-- 必须要配置id,id的名字是接口名 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 配置文件上传大小5M -->
<property name="maxUploadSize" value="5000000" />
</bean>