packagecom.maizuo.web.controller;importcom.maizuo.domain.Result;importcom.maizuo.util.ConstantsConfig;importcom.maizuo.util.Upload;importhyxlog.Log;importnet.sf.json.JSONObject;importorg.apache.commons.lang.StringUtils;importorg.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;importorg.springframework.web.multipart.MultipartFile;importjavax.imageio.ImageIO;importjavax.servlet.http.HttpServletRequest;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.util.Date;importjava.util.List;/*** Created by qiyang on 2015/6/15 and improved by heisenberg on 2016/04/18*/@Controller
@RequestMapping("/api/upload")public classUploadController {
@RequestMapping(value= "/img", method =RequestMethod.POST)
@ResponseBodypublic Result uploadImg(@RequestParam(value = "file", required = false) MultipartFile file, String pathName,
Integer sizeRule, Integer isDeviation, HttpServletRequest request)throwsFileNotFoundException, IOException {
String loghead= "通用接口-上传图片:";
JSONObject json= newJSONObject();if (file == null) {
Log.info(loghead+ "上传失败:文件为空");return new Result(900001, "", "上传失败:文件为空");
}if(StringUtils.isBlank(pathName)) {
pathName= ConstantsConfig.getString("DEFALTUPLOADPATH");
}
List uploadPathNames = ConstantsConfig.getList("UPLOADPATHNAMES");boolean flag = false;for (int i = 0; i < uploadPathNames.size(); i++) {if(pathName.equals(uploadPathNames.get(i))) {
flag= true;
}
}if (!flag) {
Log.info(loghead+ "上传失败:上传路径无效");return new Result(900001, "", "上传失败:上传路径无效");
}
String fileName=file.getOriginalFilename();//获取上传文件扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());//对扩展名进行小写转换
fileExt =fileExt.toLowerCase();//图片文件大小过滤
if (!"jpg".equals(fileExt) && !"jpeg".equals(fileExt) && !"png".equals(fileExt) && !"bmp".equals(fileExt)&& !"gif".equals(fileExt)) {
Log.info(loghead+ "上传失败:无效图片文件类型");return new Result(900001, "", "上传失败:无效图片文件类型");
}long fileSize =file.getSize();
Log.info(loghead+ "fileInfo:fileName=" + fileName + "&fileSize=" +fileSize);if (fileSize <= 0) {
Log.info(loghead+ "上传失败:文件为空");return new Result(900001, "", "上传失败:文件为空");
}else if (fileSize > (500 * 1024)) {
Log.info(loghead+ "上传失败:文件大小不能超过500K");return new Result(900001, "", "上传失败:文件大小不能超过500K");
}
File tmpFile= null;//判断文件是否为空
if (!file.isEmpty()) {
String uploadPath= request.getSession().getServletContext().getRealPath("/") + "/upload/";
File uploadDir= newFile(uploadPath);if (uploadDir.exists() &&uploadDir.isDirectory()) {
String[] childFileNameList=uploadDir.list();if (childFileNameList != null) {
File temp;for (int i = 0; i < childFileNameList.length; i++) {
temp= new File(uploadPath +childFileNameList[i]);if(temp.isFile()) {
temp.delete();
}
}
}
}else{
uploadDir.mkdir();
}try{
Date now= newDate();
String tmpFileName= String.valueOf(now.getTime()) + Math.round(Math.random() * 1000) + "." +fileExt;//文件保存路径
String tmpFilePath = uploadPath +tmpFileName;
tmpFile= newFile(tmpFilePath);
file.transferTo(tmpFile);
BufferedImage sourceImg= ImageIO.read(newFileInputStream(tmpFile));int imgWidth =sourceImg.getWidth();int imgHeight =sourceImg.getHeight();
System.out.println("上传的图片宽:" +imgWidth);
System.out.println("上传的图片高:" +imgHeight);//图片文件尺寸过滤
if (sizeRule == null) {//上传到图片服务器
String imgUrl = Upload.upload(tmpFile, "/" + pathName + "/");
json.put("fileName", fileName);
json.put("url", imgUrl);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);return new Result(0, json, "success");
}else{
System.out.println("前端选择图片尺寸规则" +sizeRule);int ruleWidth = 0;int ruleHeight = 0;try{
String imgSizeRule= ConstantsConfig.getString("UPLOADIMG_RULE" +sizeRule);
String imgSizeRule_width_height[]= imgSizeRule.split(",");
String imgSizeRule_width= imgSizeRule_width_height[0];
String imgSizeRule_height= imgSizeRule_width_height[1];
ruleWidth=Integer.parseInt(imgSizeRule_width);
ruleHeight=Integer.parseInt(imgSizeRule_height);
}catch(Exception e) {
System.out.println("没有配置尺寸规则" +sizeRule);
json.put("fileName", fileName);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);return new Result(-1, json, "配置系统没有配置上传图片尺寸规则" +sizeRule+ ",请前端修改参数sizeRule值或管理员在配置系统配置sizeRule" + sizeRule + "规则对应的配置项");
}if (isDeviation == null) {
System.out.println("严格限制图片尺寸");if (ruleWidth == imgWidth && ruleHeight ==imgHeight) {
String imgUrl= Upload.upload(tmpFile, "/" + pathName + "/");
json.put("fileName", fileName);
json.put("url", imgUrl);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);return new Result(0, json, "success");
}else{
json.put("fileName", fileName);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);
json.put("ruleWidth", ruleWidth);
json.put("ruleHeight", ruleHeight);return new Result(-1, json, "请上传" + ruleWidth + "*" + ruleHeight + "px的图片");
}
}else{int deviation = Integer.parseInt(ConstantsConfig.getString("UPLOADIMG_DEVIATION"));
System.out.println("允许尺寸误差在" + deviation + "以内");if (Math.abs(ruleWidth - imgWidth) <=deviation&& Math.abs(ruleHeight - imgHeight) <=deviation) {
String imgUrl= Upload.upload(tmpFile, "/" + pathName + "/");
json.put("fileName", fileName);
json.put("url", imgUrl);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);return new Result(0, json, "success");
}else{
json.put("fileName", fileName);
json.put("imgWidth", imgWidth);
json.put("imgHeight", imgHeight);
json.put("ruleWidth", ruleWidth);
json.put("ruleHeight", ruleHeight);return new Result(-1, json, "请上传" + ruleWidth + "*" + ruleHeight + "px的图片");
}
}
}
}catch(Exception e) {
e.printStackTrace();
Log.info(loghead+ "上传失败:文件上传失败");return new Result(900001, "", "上传失败:文件上传异常");
}finally{//删除临时文件
if(tmpFile.exists()) {
tmpFile.deleteOnExit();
Log.info(loghead+ "删除临时文件" +tmpFile.getAbsolutePath());
}
}
}return new Result(-1, json, "后台校验上传图片流程异常");
}
}