文档章节

JAVA 使用springMVC 上传多张图片或文件,并对图片进行按比例缩放处理

小爪进击者
 小爪进击者
发布于 2017/05/18 15:30
字数 1148
阅读 105
收藏 1

不多说上代码:

常量类:

package com.imcore.base.util;

/**
 * 用于存放阿里云的一些常量
 */
public class ALiYunSMS {

	public static final String LOCAL_IPANDPORT = "你的IP:你的端口/Vlike/";
	
	public static final String LOCAL_SYSIMG_PATH = "static/img/sysUploadImg/";

}

接收前台传来的文件类型,后台进行图片的储存,缩放处理:

package com.imcore.base.action.system;

import java.io.File;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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.imcore.base.entity.JsonResult;
import com.imcore.base.entity.bo.ImgUrlBo;
import com.imcore.base.util.ALiYunSMS;
import com.imcore.base.util.Constant;
import com.imcore.base.util.ImgResizeUtil;

@Controller
@RequestMapping("/upload")
public class SysUploadController {

	/**
	 * 跳到上传图片的界面
	 */
	@RequestMapping(value = "/uploadImg", method = RequestMethod.GET)
	public String cheapMeassagePicPage(HttpServletRequest request) throws Exception {
		return "uploadImg";
	}

	/**
	 * 系统上传单、多张图片处理接口
	 * 
	 * @author ZRZ 20170512
	 */
	@RequestMapping(value = "/sysUploadImg", method = RequestMethod.POST)
	@ResponseBody
	public JsonResult sysUploadImg(@RequestParam("file") MultipartFile[] file, Map<String, Object> viewData,
			HttpServletRequest request, HttpServletResponse response) {
		JsonResult jsonResult = new JsonResult();
		if (file != null && file.length > 0) {
			// 循环获取file数组中得文件
			for (int i = 0; i < file.length; i++) {
				MultipartFile files = file[i];
				// 保存文件
				jsonResult = this.sysUploadImg(files, viewData, request, response,i);
			}
		}

		return jsonResult;
	}

	public JsonResult sysUploadImg(MultipartFile file, Map<String, Object> viewData, HttpServletRequest request,
			HttpServletResponse response,int i) {
		JsonResult jsonResult = new JsonResult();
		if (file.getSize() > 32505856) {
			jsonResult.setResultCode(Constant.FAIL_CODE);
			jsonResult.setResultMessage("文件大小不能超过31M");
			return jsonResult;
		}
		String filePath = request.getServletContext().getRealPath("/static/img/sysUploadImg/");
		String ipAndPort = ALiYunSMS.LOCAL_IPANDPORT;
		String sysImgPath = ALiYunSMS.LOCAL_SYSIMG_PATH;
		// 判断文件是否为空
		if (!file.isEmpty()) {
			try {
				ImgUrlBo imgUrlBo = new ImgUrlBo();
				// 文件保存路径
				filePath = filePath + file.getOriginalFilename(); // 获取上传文件的原名
				// 生产唯一文件名的值
				String substring = filePath.substring(filePath.lastIndexOf(".")).toLowerCase();// 获取上传图片的图片格式
				String key = java.util.UUID.randomUUID() + substring;// 产生唯一值为文件名
				filePath = request.getServletContext().getRealPath("/static/img/sysUploadImg/") + key;
				// 转存文件
				file.transferTo(new File(filePath));
				try {
					// 进行图片的判断,如果图片大小过大则进行缩放处理
					ImgResizeUtil imgResizeUtil = new ImgResizeUtil(filePath);
					imgResizeUtil.resizeByWidth(680, filePath);// 以宽度为基准等比例缩放,目前定宽度为680
				} catch (Exception e) {
					jsonResult.setResultCode(Constant.FAIL_CODE);
					jsonResult.setResultMessage("图片转换大小失败");
				}
				if (i == 0) {
					imgUrlBo.setImgUrl_1(ipAndPort + sysImgPath + key);
				}
				if (i == 1) {
					imgUrlBo.setImgUrl_2(ipAndPort + sysImgPath + key);
				}
				if (i == 2) {
					imgUrlBo.setImgUrl_3(ipAndPort + sysImgPath + key);
				}
				jsonResult.setResultCode(Constant.SUCCESS_CODE);
				jsonResult.setResultMessage("文件储存成功");
				jsonResult.setData(imgUrlBo);
				return jsonResult;
			} catch (Exception e) {
				e.printStackTrace();
				jsonResult.setResultCode(Constant.FAIL_CODE);
				jsonResult.setResultMessage("文件不能为空");
				return jsonResult;
			}
		} else {
			jsonResult.setResultCode(Constant.FAIL_CODE);
			jsonResult.setResultMessage("文件不能为空");
		}
		return jsonResult;
	}

	
}

JsonResult 用于存储返回到前台的json的信息,使用@ResponseBody使对象转化为json对象

package com.imcore.base.entity;

import java.io.Serializable;
/**
 * 返回前台的json数据
 * @author ZRZ
 * 
 */
public class JsonResult implements Serializable{

	private static final long serialVersionUID = 4273005680206220420L;
	/**
	 * 返回结果码
	 * 200成功,其他则失败
	 */
	private int resultCode = 201;
	/**
	 * 操作结果信息
	 */
	private String resultMessage = "";
	/**
	 * 分页信息
	 */
	private Object pageInfo;
	/**
	 * 返回的数据
	 */
	private Object data;
	
	
	public int getResultCode() {
		return resultCode;
	}
	public void setResultCode(int resultCode) {
		this.resultCode = resultCode;
	}
	public String getResultMessage() {
		return resultMessage;
	}
	public void setResultMessage(String resultMessage) {
		this.resultMessage = resultMessage;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public Object getPageInfo() {
		return pageInfo;
	}
	
}

处理图片的类,进行伸缩处理;

package com.imcore.base.util;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImgResizeUtil {
	/**
	 * 处理图片大小
	 * 
	 * @author ZRZ 20170515
	 */
	private Image img;
	private int width;
	private int height;

	/**
	 * 构造函数
	 */
	public ImgResizeUtil(String fileName) throws IOException {
		File file = new File(fileName);// 读入已保存的文件
		img = ImageIO.read(file); // 构造Image对象
		width = img.getWidth(null); // 得到源图宽
		height = img.getHeight(null); // 得到源图长
	}

	/**
	 * 按照宽度还是高度进行压缩
	 * 
	 * @param w
	 *            int 最大宽度
	 * @param h
	 *            int 最大高度
	 */
	public void resizeFix(int w, int h, String filePath) throws IOException {
		if (width > w || height > h) {
			if (width / height > w / h) {
				resizeByWidth(w, filePath);
			} else {
				resizeByHeight(h, filePath);
			}
		}
	}

	/**
	 * 以宽度为基准,等比例放缩图片
	 * 
	 * @param w
	 *            int 新宽度
	 */
	public void resizeByWidth(int w, String filePath) throws IOException {
		if (width > w) {// 获取到的图片的宽大于指定缩放大小的宽才进行缩放
			int h = (int) (height * w / width);
			resize(w, h, filePath);
		}
	}

	/**
	 * 以高度为基准,等比例缩放图片
	 * 
	 * @param h
	 *            int 新高度
	 */
	public void resizeByHeight(int h, String filePath) throws IOException {
		if (height > h) {// 获取到的图片的高大于指定缩放大小的高才进行缩放
			int w = (int) (width * h / height);
			resize(w, h, filePath);
		}
	}

	/**
	 * 强制压缩/放大图片到固定的大小
	 * 
	 * @param w
	 *            int 新宽度
	 * @param h
	 *            int 新高度
	 */
	public void resize(int w, int h, String filePath) throws IOException {
		// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢
		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
		image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图
		File destFile = new File(filePath);
		FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
		// 可以正常实现bmp、png、gif转jpg
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(image); // JPEG编码
		out.close();
	}

}

存储返回到前台的imgurl的类:

package com.imcore.base.entity.bo;

public class ImgUrlBo {
	private String imgUrl_1;
	private String imgUrl_2;
	private String imgUrl_3;
	public String getImgUrl_1() {
		return imgUrl_1;
	}
	public void setImgUrl_1(String imgUrl_1) {
		this.imgUrl_1 = imgUrl_1;
	}
	public String getImgUrl_2() {
		return imgUrl_2;
	}
	public void setImgUrl_2(String imgUrl_2) {
		this.imgUrl_2 = imgUrl_2;
	}
	public String getImgUrl_3() {
		return imgUrl_3;
	}
	public void setImgUrl_3(String imgUrl_3) {
		this.imgUrl_3 = imgUrl_3;
	}


}

代码自己在项目中都在用,欢迎交流讨论

© 著作权归作者所有

小爪进击者
粉丝 7
博文 60
码字总数 27167
作品 0
厦门
程序员
私信 提问
【第2章 Spring快速入门】2.1 Java应用之HelloWorld

上一节:【第1章 Spring概述与结构】1.2 Spring模块与结构 注意:本系列教程不会通过工程单独依赖某个Jar包,而是通过开源中国的Maven库,来进行Jar包的依赖管理,所以后续的讲解都是以Maven...

陶邦仁
2015/05/24
0
3
Spring MVC 配置 multipart 解析器 上传文件

概述 尽管一般表单提交足以满足对典型的基本文本提交,但是当面对传送二进制数据,例如图片,视频等就显得力不从心了。与之不同的是,multipart 格式的数据会将一个表单拆分为多个部分 ,每个...

聪聪小可爱
2016/11/06
0
0
SpringMVC+Spring+Mybatis整合应用(3)

实现图片上传 需求:在用户注册页面实现上传图片作为用户头像 1. springmvc中对多部件类型请求数据解析:在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart...

江左煤郎
2018/12/03
0
0
Java处理图片

图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理. 下面的程序使用jdk1.4中最新的ImageIO对图片进行读写.使用AffineTrans...

johnnyhg
2009/05/08
586
0
图片系统

基于spring mvc, thumbnailator 实现的 图片系统 功能包括:图片上传、图片按照文件名hash 存储,根据尺寸显示图片,图片缓存 Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简...

LucEsape
2016/03/03
2
0

没有更多内容

加载失败,请刷新页面

加载更多

通过微服务来正确实施SOA

对于组织来说,能够构建、发展和扩展大型应用程序是至关重要的, 但所涉及的挑战使其成为一项艰巨的任务。正因为如此, 微服务凭借能够将单个组件拆分成围绕特定业务功能的独立服务,已成为构建...

Linux就该这么学
11分钟前
2
0
从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台。该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部分...

阿里云官方博客
14分钟前
1
0
使用python来操作redis用法详解

1、redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的red...

dragon_tech
14分钟前
2
0
给研发工程师的代码质量利器 | SOFAChannel#5 直播整理

> SOFA:Channel,有趣实用的分布式架构频道。 > > 本文根据 SOFAChannel#5 直播分享整理,主题:给研发工程师的代码质量利器 —— 自动化测试框架 SOFAActs。 > > 回顾视频以及 PPT 查看地址...

SOFAStack
16分钟前
1
0
段错误总结

https://blog.csdn.net/e_road_by_u/article/details/61415732 一、段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问...

悲催的古灵武士
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部