spring 多文件上传 + 图片缩放 + 图片截取(头像功能)
2014-10-28 17:48
459 查看
实现图片上传
用户必须能够上传图片,因此需要文件上传的功能。比较常见的文件上传组件有Commons FileUpload,这里我们选择Commons FileUpload。
首先是页面的form表单设置,记住要配method和enctype属性哦!!
在FileAction中,将HttpServletRequest转型为MultipartHttpServletRequest,就能非常方便地得到文件名和文件内容。
本文出自 “流星雨的IT路程” 博客,请务必保留此出处http://lxy2020.blog.51cto.com/2528961/1568956
用户必须能够上传图片,因此需要文件上传的功能。比较常见的文件上传组件有Commons FileUpload,这里我们选择Commons FileUpload。
首先是页面的form表单设置,记住要配method和enctype属性哦!!
<form action="upload.do" method="post" enctype="multipart/form-data"> <input name="file" type="file" multiple> <input type="submit" value="submit"> </form>由于Post一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉DispatcherServlet如何处理MultipartRequest。首先在dispatcher-servlet.xml中声明一个MultipartResolver:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的最大尺寸为1MB --> <property name="maxUploadSize"> <value>1048576</value> </property> </bean>这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller。
在FileAction中,将HttpServletRequest转型为MultipartHttpServletRequest,就能非常方便地得到文件名和文件内容。
@RequestMapping(value = "/upload", method = RequestMethod.POST) public String upload(HttpServletRequest request,HttpServletResponse response) throws IOException, IllegalStateException { // 转型为MultipartHttpRequest: MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 获得文件: List<MultipartFile> multipartFileList = multipartRequest.getFiles("file"); for (MultipartFile multipartFile:multipartFileList){ // 获得文件名: String filename =multipartFile.getOriginalFilename(); String tmps[] = filename.split("\\.");// "."在正则表达式中有特殊含义 所以要进行转义 /** * {1} 获得输入流 在写入文件 ( 此处 实现了图片的缩放功能 ) **/ InputStream input = multipartFile.getInputStream(); // createPreviewImage(input,"small-"+tmps[0]+".jpg"); createPreviewImageofCut(input,"smallcut-"+tmps[0]+".jpg"); /** * {2}或者: **/ File source = new File("f://"+"normal-"+tmps[0]+".jpg"); //正常大小图片 multipartFile.transferTo(source); } return "fileupload"; }剩余的图片缩放和图片截取都在下面的代码中,比较简单不做过多解释
//创建缩略图 public void createPreviewImage(InputStream input,String filename) throws IOException { File fo = new File("f://"+filename); // 目标图片 BufferedImage bis = ImageIO.read(input); //原始图片 int w = bis.getWidth(); //图片原始大小 int h = bis.getHeight(); int nw ; //图片缩放后的大小 int nh ; //缩略图的标准 为 120*120(等比例缩放) if ( (double)w / h < 1 ){ nh = 120; nw = nh*w/h; }else { nw = 120; nh = nw*h/w; } BufferedImage _image = new BufferedImage(nw, nh,BufferedImage.TYPE_INT_RGB); _image.getGraphics().drawImage(bis, 0, 0, nw, nh, null); //绘制缩小后的图 FileOutputStream newimageout = new FileOutputStream(fo); //输出到文件流 /* * JPEGImageEncoder 将图像缓冲数据编码为 JPEG 数据流。该接口的用户应在 Raster * 或 BufferedImage 中提供图像数据,在 JPEGEncodeParams 对象中设置必要的参数, * 并成功地打开 OutputStream(编码 JPEG 流的目的流)。JPEGImageEncoder 接口可 * 将图像数据编码为互换的缩略 JPEG 数据流,该数据流将写入提供给编码器的 OutputStream 中。 注意:com.sun.image.codec.jpeg 包中的类并不属于核心 Java API。它们属于 Sun 发布的 JDK 和 JRE 产品的组成部分。虽然其它获得许可方可能选择发布这些类,但开发人员不能寄 希望于从非 Sun 实现的软件中得到它们。我们期望相同的功能最终可以在核心 API 或标准扩 展中得到。 */ JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimageout); encoder.encode(_image); //近JPEG编码 newimageout.close(); } //创建截取图 public void createPreviewImageofCut(InputStream input,String filename) throws IOException { File fo = new File("f://"+filename); // 目标图片 BufferedImage bis = ImageIO.read(input); //原始图片 int w = bis.getWidth(); //图片原始大小 int h = bis.getHeight(); //四个参数分别为图像起点坐标和宽高,即CropImageFilter(int x,int y,int width,int height),详细情况请参考API ImageFilter cropFilter =new CropImageFilter(0,0,200,200); //获得截图图片 Image croppedImage = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(bis.getSource(),cropFilter)); //Image 转为 BufferedImage BufferedImage bufImg = new BufferedImage(croppedImage.getWidth(null), croppedImage.getHeight(null),BufferedImage.TYPE_INT_RGB); bufImg .createGraphics().drawImage(croppedImage, 0, 0, null); //输出为图片文件 ImageIO.write(bufImg, "jpeg", fo); } }
本文出自 “流星雨的IT路程” 博客,请务必保留此出处http://lxy2020.blog.51cto.com/2528961/1568956
相关文章推荐
- ASP 实例:头像上传。文件(图片)上传,头像截取(Jquery的imgAreaSelect插件来选取截取区域)
- ASP 实例:头像上传。文件(图片)上传,头像截取(Jquery-ui插件来选取截取区域)
- myBatis + SpringMVC上传、下载文件、显示byte图片文件、等比例缩放图片
- node.js+express 实现CSDN上传头像功能 (包含图片的缩放,生成头像缩略图)
- 文件工程Servlet+Jsp实现图片或文件的上传功能
- JAVA实现图片等比缩放,图片截取功能--封装类
- dhl: ASP.NET MVC1.0 的图片(文件)上传功能
- paip.图片文件上传功能总结
- SilvetLight 实现的一个上传图片时功能动态裁剪部分区域和缩放图片的功能
- Servlet+Jsp实现图片或文件的上传功能
- JFileChooser+FileNameExtensionFilter 文件选择器+过滤器------上传图片功能 表格内部操作
- php+jquery+Jcrop实现上传-截取-保存图片功能
- Spring文件上传下载and图片上传及前台显示
- 单个文件(图片)上传功能
- android 手机拍照上传项目的开发-----Camera1.2(图片文件的翻转及缩放操作)
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- 问题描述:制作上传头像缩略图,希望图片能够等比例剪切,类似豆瓣的头像上传功能
- 扩展fckeditor的上传图片和上传文件功能! (二)
- ueditor 编辑器的配置 实现了上传图片与文件功能---附效果图