本篇内容介绍了“spring+hibernate文件上传并放入大字段怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
首先准备SPRING 框架,HIBERNATE 框架,common-file_upload.jar包。
当然了不能忘记数据库JDBC驱动的jar。这里是oracle 就用了class12.jar
这里采用了Oracle 数据库,在webroot下建立一个fileupload目录。以便放上传来的文件。
等等。。
既然用了Srping 框架,那就要翻翻Srping 手册,他对文件上传的支持。Spring 由内置的multipart包中的插件对象
MultipartResovler 来完成的。Spring 提供MultipartResovler可以支持Commons FileUpload(http://jakarta.apache.org/commons/fileupload)
和Cos FileUpload(http://www.servlet.com/cos)所以刚开始还要准备一个common-file_upload.jar。
缺省,Spring 是没有multipart 处理。所以要用multipart处理需要在web应用的上下文加上multipart 解析器。然后你的请求中包含multipart,在上下文
定义的MultipartResolver就会解析他,这样,你请求中的multipart属性就会像其他属于一样被处理。
请看下面:
<!--使用common-file_upload.jar的调用方法-->
<!--使用Cos FileUpload的调用方法
-->
所以,需要准备cos.jar或者common-file_upload.jar。
接下来在一个表单中处理multipart;
这时候我们准备一个代文件域的表单
file.jsp:
我们将上面的URL映射到控制器上,已经处理bean 的控制器本身。
然后创建控制器和含有文件属性的bean。
FileUploadBean.java
public class FileUploadBean {
private byte[] file;
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
}
}
UploadFileCtrl.java
public class UploadFileCtrl extends SimpleFormController {
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object arg2, BindException arg3)
throws Exception {
// TODO Auto-generated method stub
FileUploadBean bean = (FileUploadBean) arg2;
byte[] bytes = bean.getFile();//到这步的时候Spring 已经把文件传到内存当中了。
// cast to multipart file so we can get additional information
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
.getFile("file");
//判断是否有文件被上传,如果有,就把文件放入数据库或者是服务器上的硬盘里。
if (bytes.length!=0) {
String path = request.getRealPath("/fileupload/");
File dirPath = new File(path);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
/*
这是存放到BLOB大字段当中。
UpLoadPicPO po = new UpLoadPicPO();
po.setFile(bytes); //在这里就感觉输入大字段就特别简单了。
po.save();
*/
//以下是存放入服务器硬盘上。
String filename=path+file.getName();
File uploadedFile = new File(filename);
FileCopyUtils.copy(bytes, uploadedFile);
System.out.println("********************************");
System.out.println(uploadedFile.getAbsolutePath());
System.out.println(bytes.length);
System.out.println("********************************");
}
return new ModelAndView("file.jsp");
}
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws ServletException {
binder.registerCustomEditor(byte[].class,
new ByteArrayMultipartFileEditor());
}
}
如果只是存放在服务器硬盘上,那么到这一步算是结束了。但是如果你要放在BLOB大字段中,,继续往下走。
(这里就不讨论一些基本的HIBERNTAE配置和SPRING 配置。如有不明白去看这两个的文档)
创建一个uploadfile表映射。
表结构如下
uuid varchar2 32
file blob
uploadfile.hbm.xml:
PO文件如下:
UploadFilePO:
public class UpLoadPicPO extends AbstractPO{
private String id;
private byte[] file;
public byte[] getFile() {
return image;
}
public void setFile(byte[] file) {
this.file = file;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Lob字段处理的配置:
我们前面已经指出Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,
然后获取该字段的引用,通过这个引用更改其值。所以要完成对Lob字段的操作,Hibernate必须执行两步数据库访问操作,先Insert再Update。
使用BlobByteArrayType字段类型后,为什么我们就可以象一般的字段类型一样操作Blob字段呢?可以确定的一点是:BlobByteArrayType不可能逾越Blob天生的操作方式,
原来是BlobByteArrayType数据类型本身具体数据访问的功能,它通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般字段业类型无异,
所以LobHandler即是那个"苦了我一个,幸福十亿人"的那位幕后英雄。
LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。LobHandler的配置如代码
<!--
这里我采用了c3p0为连接池。如果是其他的还可以选择。
如果是用dataSource则使用。
或则还有其他的连接池,等等。
-->
这样配置好以后,就能在UploadFileCtrl.java里就能去掉/* */,就这么简单。。方便吧。。哈哈哈!!!
要从大字段里做下载也很简单啊。看下面代码。
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
response.setContentType("application/x-msdownload");
UpLoadPicPO po = (UpLoadPicPO)dao.get(UpLoadPicPO.class);//这里我只是简略的写了下,意思大家都明白。
byte[] bytes = po.getFile();
ServletOutputStream sos = response.getOutputStream();
sos.write(bytes);
sos.close();
return null;
}
“spring+hibernate文件上传并放入大字段怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。