java 二进制图片上传_Spring MVC上传图片,Java二进制图片写入数据库,生成略缩图...

背景描述:最近做到一个项目,有个商品登记功能。登记的信息包括:基本信息若干(文字信息);图片信息,要求将图片保存到数据表中的image字段(sql server 数据库)

步骤:1.将图片上传到服务器的一个磁盘目录下。

2.将刚才上传好的图片写入数据库image字段。

上传的支持。

jsp 页面:

inputtype="file"name="image" />

="submit"value="上传"class="btn4" />

spring_mvc.xml配置

beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

bean>

Controller:

@RequestMapping("/doUploadFile")publicModelAndView doUploadFile(HttpServletRequest request,HttpServletResponse response,HttpSession session)throwsException,IOException {//转型为MultipartHttpRequest:

MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest) request;获得文件:

MultipartFile file = multipartRequest.getFile("image");获得文件名:

String filename =file.getOriginalFilename();

InputStream input=file.getInputStream();String path = "D:/goodsImages";下边这个path是写在配置文件里边的,方便修改,这个方法很长但或得的结果就是路劲D:/goodsImages

String path =ConfigConstants.getInstance()

.get("goods.uploadImage.dir");

File savePath= newFile(path);if (!savePath.exists()) { savePath.mkdir();

}

SaveFileFromInputStream(input,savePath.toString(),filename);

String result= "上传成功!";

ModelAndView modelAndView= new ModelAndView("goods/uploadSuccess");

modelAndView.addObject("result",result);

modelAndView.addObject("filename"returnmodelAndView;

}

如此上传就搞定了。

上传文件补充,另一个方法:

1.项目中导入  jar 包 cos.jar

2.表单:enctype="multipart/form-data"

3.处理方法:主要用到  MultipartRequest 类,详细情况查看:http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html

@RequestMapping(value = "/uploadImage.do"public String uploadImage(HttpServletRequest request) Exception {

MultipartRequest mr= null;int maxPostSize = 1 * 100 * 1024;

mr=new MultipartRequest(request,"E:\\goodsImages",maxPostSize,"GBK"return ;

}

二、生成略缩图。

public voidcreateIcon() {try{

File fiBig= new File("D:/log/tickit.png"); 大图文件

File foSmall = new File("D:/log/tickitIcon.png"); 将要转换出的小图文件

AffineTransform transform= AffineTransform();读取图片

BufferedImage bis =ImageIO.read(fiBig);获得图片原来的高宽

int w =bis.getWidth();int h =bis.getHeight();double scale = (double) w /h;等比例缩放int nowWidth = 120;int nowHeight = (nowWidth * h) /w;if (nowHeight > 120) {

nowHeight= 120;

nowWidth= (nowHeight * w) /h;

}double sx = (double) nowWidth /double sy = (double) nowHeight /h;

transform.setToScale(sx,sy);

AffineTransformOp ato= new AffineTransformOp(transform,);

BufferedImage bid= BufferedImage(nowWidth,nowHeight,BufferedImage.TYPE_3BYTE_BGR);

ato.filter(bis,bid);

ImageIO.write(bid,"png"catch(Exception e) {

e.printStackTrace();

}

}

三、图片写入数据库。

1.图片实体类的 图片字段(picture) 用  byte[]类型

@Entity

@Table(name= "spaq_pic")classGoodsPic {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name= "pic_id"privateLong picId;

@Column(name= "pic_name"String picName;

@Column(name= "pic_descr"String picDescr;

@Column(name= "picture"private byte[] picture;//省略其他字段及get,set方法

}

2.代码,读取本地图片储存在byte[]中,付给实体类的picture字段,调用 hibernate的save方法保存

/*** hibernate保存图片到数据表*/@Transactional(readOnly= falsevoid hibsaveImage(GoodsPic gp,String path) {GoodsPic为图片实体类,path为图片所在磁盘的路径

{

InputStream in= ;

in= FileInputStream(path);byte[] b = new [in.available()];

in.read(b);

in.close();

gp.setPicture(b);

myDao.save(gp);

}(Exception e) {

e.printStackTrace();

}

}

[spring如何启动的?这里结合spring源码描述了启动过程](https://www.cnblogs.com/demingblog/p/7443714.html)

[SpringMVC是怎么工作的,SpringMVC的工作原理](https://www.cnblogs.com/demingblog/p/9925268.html)

[spring 异常处理。结合spring源码分析400异常处理流程及解决方法](https://www.cnblogs.com/demingblog/p/9218271.html)

[Mybatis Mapper接口是如何找到实现类的-源码分析](https://www.cnblogs.com/demingblog/p/9544774.html)

[使用Netty实现HTTP服务器](https://www.cnblogs.com/demingblog/p/9970772.html)

[Netty实现心跳机制](https://www.cnblogs.com/demingblog/p/9957143.html)

[Netty系列](https://www.cnblogs.com/demingblog/p/9912099.html)

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值