springMVC MultipartFile 上传图片时修改图片大小

1.引言

服务器配置比较低,打开网站时加载1MB+的图片 速度很慢,影响客户体验。所以从网上找了java修改图片大小的方法,这里记录一下 以备以后不时之需。我这里设置的是宽240,,高135 按照16:9的比例设置。

修改之后的图片大小在100kb左右

16:9的比例其他参数:

3840×2160  2560X1440 1920×1080 1600×900 1366×768 1280×720 1024×576

960×540 854×480 720×405 640×360 480×270 320×180

2.代码

@RequestMapping("/admin/fileUpload")
	@ResponseBody
	public Map<String, Object> fileUpload(HttpServletRequest request,
			@RequestParam("uploadFile") MultipartFile uploadFile){
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			//原文件名后缀
			String fileEnd = FilenameUtils.getExtension(uploadFile.getOriginalFilename());
			//新文件名以uuid为名
			String fileUUID = CommonsUtil.getUUID();
			//获取当前项目部署的地址,也可以直接指定路径,D://blogFile//xx.jpg
			//String realPath = request.getSession().getServletContext().getRealPath("//blogFile//"+TimeUtil.curYearMonthDay());
			String realPath = "C://blogFile//"+TimeUtil.curYearMonthDay();
			File dirs=new File(realPath);
			if(!dirs.exists()){//判断文件夹是否存在 
				System.out.println("文件夹不存在,进行创建。");
				dirs.mkdirs();//不存在就创建
			}
			//创建file对象,新地址新名称 原上传图片所需
			//File newFile=new File(realPath,fileUUID+"."+fileEnd);

			//上传图片时对图片按照16:9的比例压缩240*135
			//读取图片
			BufferedInputStream in = new BufferedInputStream(uploadFile.getInputStream());
			//字节流转图片对象
			Image bi =ImageIO.read(in);
			//构建图片流 按照16:9的比例 设置宽高 240*135 
            //宽240 高135 我这里直接写死了 也可以写成参数形式的。
			BufferedImage tag = new BufferedImage(240, 135, BufferedImage.TYPE_INT_RGB);
			//绘制改变尺寸后的图
			tag.getGraphics().drawImage(bi, 0, 0, 240, 135, null);  
			//输出流
			BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(realPath+"//"+fileUUID+"."+fileEnd));
			ImageIO.write(tag, fileEnd,out);
			in.close();
			out.close();
			//原上传图片方法
			//uploadFile.transferTo(newFile);
			//FileUtils.copyInputStreamToFile(uploadFile.getInputStream(), newFile);//第二种原上传图片方法
			System.out.println("图片地址:"+realPath+"//"+fileUUID+"."+fileEnd);
			map.put("sign", "success");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("sign", "error");
			map.put("msg", e.toString());
		}
		return map;
	}

 

一点小建议

因为java是跨语言 所以路径符最好使用/

 

在java中路径一般用"/"
windows中的路径一般用"\"
linux、unix中的路径一般用"/"
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring MVC是一个基于Java的开源框架,用于构建Web应用程序。它提供了一种模型-视图-控制器(MVC)的架构模式,用于将应用程序的不同部分分离开来,以实现更好的可维护性和可扩展性。 下面是一个简单的Spring MVC上传下载的实例: 1. 配置文件: 首先,在Spring MVC的配置文件中添加以下配置: ```xml <!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/> <!-- 设置最大上传文件大小为10MB --> </bean> ``` 2. 控制器类: 创建一个控制器类,用于处理上传和下载请求。以下是一个示例: ```java @Controller public class FileController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 保存文件到服务器或者其他操作 return "redirect:/success"; // 上传成功后跳转到成功页面 } catch (IOException e) { e.printStackTrace(); } } return "redirect:/error"; // 上传失败后跳转到错误页面 } @RequestMapping(value = "/download", method = RequestMethod.GET) public ResponseEntity<Resource> downloadFile() { // 处理文件下载逻辑 // 构建文件资源对象 Resource fileResource = new FileSystemResource("path/to/file"); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=file.txt"); // 返回文件资源和响应头 return ResponseEntity.ok() .headers(headers) .contentLength(fileResource.contentLength()) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(fileResource); } } ``` 3. 前端页面: 在前端页面中添加上传和下载的表单和按钮。以下是一个简单的示例: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="上传" /> </form> <a href="/download">下载文件</a> ``` 这是一个简单的Spring MVC上传下载的实例。你可以根据实际需求进行修改和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值