您的位置:首页 > 数据库

从浏览器上传图片到数据库的一种方式

2017-11-20 17:20 239 查看
引言:在我们写一个注册页面时,时常要传递很多信息给servlet页面,但是当我们要传递图片信息时,然后我们就发现传递图片信息和传递用户名,名字等文本信息的方法是不一样的,下面是笔者总结的一种方法
一、方法概要
传递图片的关键就是我们怎么获得从jsp页面传递来的图片的对象,在servlet 里有一个Part 类存储传递过来的图片,存储方式类似于key-value 形式存储,Part 存放于request对象里面,我们根据标签name 来获得存放图片part,然后打开图片的读取流,通过IOUtils.toByteArray(in)方法将图片存放到一个字节数组(byte[])里边,然后便可以将字节数组存放到对应javaBean对象里面存放到数据库中了。
还有一点数据库中的存放图片的字段,其类型必须为blob。
二、方法过程
1)jsp页面<form action="doUploadServlet" method = "post" enctype = "multipart/form-data">
选择文件<input type="file" name = "file">
<input type = "submit" value = "上传">
</form>
重点是提交方式必须为post,表单数据编码需要设置为  multipart/form-data
以上两点若有写错,后台便会报错
2)servlet页面@WebServlet("/doUploadServlet")
@MultipartConfig
public class DoUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private CarDaoImpl cdi = new CarDaoImpl();

public DoUploadServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try{
Part part = request.getPart("file"); //根据名字获取part对象
InputStream in = part.getInputStream(); //打开图片的读取流
byte[] img = IOUtils.toByteArray(in); //读取图片信息字节流存放到字节数组
Car c = new Car();//实例化bean
c.setBookPicture(img); //调用Car类的方法,注意Car类中的bookPicture需声明为byte[] 类型
cdi.addCar(c); //调用dao层方法将对象存放到数据库

}catch(Exception e){
e.printStackTrace();
}
}

}
必须配置注解@MultipartConfig,不然会出异常Unable to process parts as no multi-part configuration has been provided
笔者第一次使用忘记配置这个注解,浪费了很多时间,(⊙﹏⊙)b!
以上就是从浏览器上传图片到数据库的一种方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: