springmvc图片文件上传
用MultipartFile文件方式传输
Controller
package com.controller;import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List;import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.imageio.ImageIO;import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; 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.service.PictureService; import com.utils.PictureUtils; import com.entity.JsonResult; import com.entity.SimpleJsonResult;@Controller public class PictureController {private static final Logger logger = Logger.getLogger(PictureController.class);@Resourceprivate PictureService service;@Value("#{settings['picturePath']}")private String PATH;/*** * 图片文件上传接口* * @param files* 上传的文件图片数组* @param childPath* 子路径* */@RequestMapping(value = "baseSave", method = RequestMethod.POST)@ResponseBodypublic JsonResult save(@RequestParam(value = "file", required = false) MultipartFile[] files, String childPath) {SimpleJsonResult result = new SimpleJsonResult(); // 自定义的一个输出类
if (files == null || files.length == 0) {return result.setExecption("失败");}for (MultipartFile file : files) {if (file.isEmpty())return result.setExecption("失败");try {if (ImageIO.read(file.getInputStream()) == null)return result.setExecption(EXECPTION_0041);} catch (IOException e) {logger.error("图片文件读取失败");}}String name;int size = 0;List<String> url = new ArrayList<>();String paths = PATH;if (StringUtils.isNotBlank(childPath)) {if (childPath.equals(PictureUtils.HELPS) || childPath.equals(PictureUtils.NEWS)) {paths = paths + childPath + File.separator;File filePath = new File(paths);if (!filePath.exists())filePath.mkdirs();}}for (MultipartFile file : files) {try {name = service.save(file, paths);size++;url.add(name);} catch (IOException e) {logger.error(e, e);return "失败";}}return SimpleJsonResult.buildSuccessResult(url).setModel("number", size);}@PostConstructpublic void init() {File file = new File(PATH);file.setWritable(true, false);if (!file.exists())file.mkdirs();if (!file.canWrite()) {logger.error(file.getAbsolutePath() + ":文件夹没有权限创建");return;}logger.info("filePath:" + PATH);} }
SimpleJsonResult 类格式
//SimpleJsonResult 类格式/** public static SimpleJsonResult buildFailedSimpleJsonResult(IExceptionCode code) {SimpleJsonResult result = new SimpleJsonResult();result.setSuccess(false);result.setMessage(code.getDescribe());result.setCode(code.getCode());return result;}public static SimpleJsonResult buildSuccessSimpleJsonResult(IExceptionCode code) {SimpleJsonResult result = new SimpleJsonResult();result.setSuccess(true);result.setMessage(code.getDescribe());result.setCode(code.getCode());return result;}public static SimpleJsonResult build() {SimpleJsonResult result = new SimpleJsonResult();return result;}public SimpleJsonResult setExecption(IExceptionCode code) {if (code.getCode().equals("0"))setSuccess(true);elsesetSuccess(false);this.code = code.getCode();setMessage(code.getDescribe());return this;}; */
service类实现
package com.service;import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random;import javax.annotation.Resource; import javax.imageio.ImageIO;import org.apache.commons.codec.digest.DigestUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile;import com.entity.Picture; import com.mappers.PictureMapper; import com.utils.PictureUtils;@Service public class PictureService {@Resourceprivate PictureMapper mapper;private String no = "TP";@Transactional(timeout = 3000)public String save(MultipartFile file, String path) throws IOException {//Picture width and heightBufferedImage bff =ImageIO.read(file.getInputStream());Picture entity = new Picture(); //实体类String fileName = file.getOriginalFilename();String name = this.getName(fileName, file.getSize());name = PictureUtils.save(file, path, name); //图片保存到服务器地址中entity.setOriginal(fileName); // 上传的名称entity.setName(name); // 名称entity.setWidth(bff.getWidth()); // 宽entity.setHeight(bff.getHeight()); //高mapper.insert(entity); //添加进去return name;}private String getName(String fileName, long size) { //重命名StringBuilder sb = new StringBuilder();String[] split = fileName.split("\\.");String suffix = split[split.length - 1];sb.append(fileName).append(System.currentTimeMillis()).append(new Random().nextFloat()).append(Thread.currentThread().getId());String name = DigestUtils.md2Hex(sb.toString()).toUpperCase();return sb.delete(0, sb.length()).append(no).append(name).append(".").append(suffix).toString();} }
PictureUtils 图片保存工具类
package com.utils;import java.io.IOException;import org.springframework.web.multipart.MultipartFile;import net.coobird.thumbnailator.Thumbnails;public class PictureUtils {public static long SIZE = 100L << 10;public static String SUFFIX_JPG = "jpg";public static String NEWS = "news";public static String HELPS = "helps"; //保存图片public static String save(MultipartFile file, String path, String name) throws IOException {int i = 1;long size = file.getSize();Thumbnails.of(file.getInputStream()).scale(1).outputQuality(1f).toFile(path + i + "_" + name);if (size > SIZE) {float ratio = 1.0f / (float) (size / SIZE);++i;Thumbnails.of(file.getInputStream()).scale(1).outputQuality(ratio).toFile(path + i + "_" + name);}return i + "_" + name;} // 设置宽高保存public static String save(MultipartFile file, String path, String name, int width, int heigth, boolean compresseion)throws IOException {int i = 1;long size = file.getSize();Thumbnails.of(file.getInputStream()).size(width, heigth).outputQuality(1f).toFile(path + i + "_" + name);if (size > SIZE) {float ratio = 1f / (float) (size / SIZE);++i;Thumbnails.of(file.getInputStream()).size(width, heigth).outputQuality(ratio).toFile(path + i + "_" + name);}return i + "_" + name;}}
实体类
package com.entity;public class Picture {private static final long serialVersionUID = 1L;@Columnprivate String original;@Columnprivate String name;@Columnprivate Integer width;@Columnprivate Integer height;public Picture() {super();} }
配置文件
No=TP jpg=.jpg picturePath=/picture/
偶遇晨光
2016-05-30