Spring MVC 的图片上传相关
来源:互联网 发布:群优化 编辑:程序博客网 时间:2024/05/15 01:20
spring mvc 自带的文件上传
http://www.cnblogs.com/fjsnail/p/3491033.html
1.配置图片上传解析器
springmvc使用commons-fileupload进行图片上传。
需要导入的jar包为:commons-fileupload-1.2.2.jar和依赖包commons-io-2.4.jar。
然后在springmvc中配置图片上传解析器:
<!-- 文件上传 CommonsMultipartResolver依赖我们传入的fileupload jar包--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的最大尺寸为5MB --> <property name="maxUploadSize"> <value>5242880</value> </property> </bean>
2.编写controller方法
1.前端页面通过from表单进行上传
@RequestMapping(value="/thumbnail",method=RequestMethod.POST) public ModelAndView thumbnail(@RequestParam("image")CommonsMultipartFile file,HttpSession session){ String uploadPath = "/images/ori_img"; String realUploadPath = session.getServletContext().getRealPath(uploadPath);//绝对路径 String imageUrl = uploadService.uploadImage(file, uploadPath, realUploadPath);//图片上传 String thumImageUrl = thumbnailService.thumbnail(file, uploadPath, realUploadPath);//缩略图的生成 ModelAndView ret = new ModelAndView(); ret.addObject("imageURL",imageUrl); //ret.addObject("thumImageUrl", thumImageUrl); ret.setViewName("thumbnail"); return ret; }
图品上传处理
public String uploadImage(CommonsMultipartFile file,String uploadPath,String realUploadPath){ InputStream is = null; OutputStream os = null; Calendar calendar = Calendar.getInstance(); long imgName = calendar.getTime().getTime(); try { is = file.getInputStream(); String des = realUploadPath + "/"+Long.toString(imgName)+file.getOriginalFilename(); os = new FileOutputStream(des); byte[] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer))>0){ os.write(buffer); } } catch (Exception e) { e.printStackTrace(); }finally{ if(is!=null){ try{ is.close(); }catch (Exception e2){ e2.printStackTrace(); } } if(os!=null){ try{ os.close(); }catch (Exception e2){ e2.printStackTrace(); } } } return uploadPath + "/"+Long.toString(imgName)+file.getOriginalFilename(); }
缩略图处理:
ps:使用了Thumbnails工具类
public class ThumbnailService { public static final int WIDTH = 100; public static final int HEIGHT = 100; public String thumbnail(CommonsMultipartFile file,String uploadPath,String realUploadPath){ try { String des = realUploadPath + "/thum" + file.getOriginalFilename(); Thumbnails.of(file.getInputStream()).size(WIDTH, HEIGHT).toFile(des);//缩略图生成 } catch (Exception e) { // TODO: handle exception } return uploadPath + "/thum" + file.getOriginalFilename(); }}
2.前端使用base64位码上传图片
PS:图片越大,base64越长,达到一定长度会出现问题:
- 使用mvc接收数据可能导致程序崩溃,所以使用原始的buffer接受大数据,并且不要期望把base64存到数据库,在存储过程中同样存在崩溃风险。
- 前端页面通过ajax发送过长的base64位码,因为一些原因(比如服务器请求超时,设置服务器超时时间来解决)使ajax判断请求失败,要注意后台是否接受成功。
- base64位码开头字段是文件类型等,要注意截取,传到java中是json字符串的情况下,前后有双引号,也要注意截取。
@RequestMapping(value="/thumbnail_2",method=RequestMethod.POST) @ResponseBody public String thumbnail_2(HttpServletRequest req,HttpSession session){ StringBuffer buffer = null; try { BufferedReader reader = req.getReader(); buffer = new StringBuffer(); String string=null; while ((string = reader.readLine()) != null) { buffer.append(string); } reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String uploadPath = "/images/dw_img"; String imgBase = buffer.toString().substring(1, buffer.length()-1); //System.out.print(imgBase); String realUploadPath = session.getServletContext().getRealPath(uploadPath);//绝对路径 ImageBinary.base64StringToImage(imgBase, realUploadPath); return "OK"; }
public class ImageBinary { static BASE64Decoder decoder = new sun.misc.BASE64Decoder(); static void base64StringToImage(String base64String,String realUploadPath) { Calendar calendar = Calendar.getInstance(); long imgName = calendar.getTime().getTime(); try { byte[] bytes1 = decoder.decodeBuffer(base64String); FileOutputStream os = new FileOutputStream(new File(realUploadPath+"/"+Long.toString(imgName)+".jpg")); os.write(bytes1); os.close();// ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);// BufferedImage bi1 = ImageIO.read(bais);// File w2 = new File(realUploadPath+"/"+Long.toString(imgName)+".png");//// //File w2 = new File("f://2.png");// 可以是jpg,png,gif格式// ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图片,此处不需改动 } catch (IOException e) { e.printStackTrace(); }finally{ } }}
https://github.com/Amant-huangqi/ImageIo
0 0
- Spring MVC 的图片上传相关
- spring mvc 图片上传
- spring mvc 上传图片
- Spring MVC 图片上传
- Spring mvc图片上传
- spring mvc 上传图片
- spring mvc 图片上传
- spring mvc 图片上传
- spring mvc 上传图片
- Spring MVC-图片上传
- Spring MVC上传图片
- spring mvc的图片上传与显示
- Spring MVC上传图片的方法
- Spring Mvc 上传图片代码
- spring MVC 上传图片 DEMO
- spring mvc+xheditor图片上传
- 使用Spring MVC上传图片
- form图片上传+spring MVC
- iOS 控制器跳转动画
- HDU 5750 Dertouzos(思路题)
- pwnable.kr [Toddler's Bottle]
- MySQL中的联合查询
- Spring Aop
- Spring MVC 的图片上传相关
- 推荐系统user-based和item-based协同过滤算法定性比较
- localStorage、sessionStorage、jquery_cookie
- 户外广告行业如何使出“洪荒之力”
- FAT32的几个问题
- java 我要在比如输出中 双引号里使用双引号。如图 怎么写
- RabbitMQ 入门 Helloworld
- sequence logo
- R语言中的检验方法总结