上传:
控制层
SmartUpload su = new SmartUpload();
su.initialize(this.getServletConfig(), request, response);
try {
su.upload();//不要忘记写哦
manager.upload(su);
} catch (SmartUploadException e) {
e.printStackTrace();
}
smartupload还是很牛的。
业务层
File1 file = files.getFile(i);
//生成上传文件的实例
Uploadfiles fileInstance = new Uploadfiles();
fileInstance.setFilename(file.getFileName());
fileInstance.setFiletitle(su.getRequest().getParameter("title"));
fileInstance.setFilesize((long)file.getSize());
fileInstance.setFileext(file.getFileExt());
fileInstance.setCreatedate(new Date());
fileInstance.setContenttype(file.getContentType());
byte[] bytes = new byte[file.getSize()];
for(int j = 0 ; j < file.getSize() ; j++){
bytes[j] = file.getBinaryData(j);
}
//将大数据字段保存到另外一个表中,等需要的时候 再进行调用
//生成filecontent实例,并建立双向关联关系
Blob filecontent = Hibernate.createBlob(bytes);
Filecontent content = new Filecontent();
content.setUploadfiles(fileInstance);
content.setContent(filecontent);
fileInstance.getFilecontents().add(content);
//保存数据
try{
HibernateUtils.beginTransaction();
dao.saveFile(fileInstance);
HibernateUtils.commitTransaction();
}catch(Exception e){
HibernateUtils.rollbackTransaction();
e.printStackTrace();
}finally{
HibernateUtils.closeSession();
}
}
看到大牛们写的上传BLOB数据的方法有很多种,其中一种使用数量最多的是用游标来控制的,我偷懒直接用Hibernate的特性来。
展现:(起初最难控制的地方)
控制层:
String id = request.getParameter("id");
List list = manager.getContent(id);
byte[] bytes = (byte[])list.get(0);
//原来为了得到文件的类型,开始准备手工写type,最后发现FILE1类里面已经有了,差点走弯路。
response.setContentType(list.get(1).toString());
OutputStream outs = response.getOutputStream();
outs.write(bytes);
outs.flush();
outs.close();
业务层:
InputStream stream = null;
List list = new ArrayList();
Uploadfiles uf = getFileByID(new Long(id));
byte[] bytes = new byte[uf.getFilesize().intValue()];
try {
stream = uf.getFilecontents().iterator().next().getContent().getBinaryStream();
//还是有缺陷 long to int
stream.read(bytes);
list.add(bytes);
list.add(uf.getContenttype());
} catch (Exception e) {
e.printStackTrace();
}
return list;
总结:整体来说主要就是这些代码,完成了其中的上传和查看功能,smartupload里面的类其实不是很多,但是看起来还是有点难度,我只看完了里面的成员方法和变量,里面最牛的还是smartupload的getrequest()方法和File1的getContent()方法。我觉得那两个方法用好了,就可以了。还有就是性能上的问题,在查找资料的时候,看到从数据库抓取文件数据的时候,在没用到blob这个属性的时候还是不要抓出来了,尤其在列表的时候,我在hibernate里面设置了lazy。
本来想写一个上传多个文件的例子,结果偷懒之写完了单个文件上传的,最近在学struts,剩下的多个上传还是等闲了在写。
分享到:
相关推荐
参数: "num"=>"20" 说明:当前页显示条数,一定和分页代码一致. 参数: "title_sub"=>"40" 说明: 文章标题默认截取数,也可以指定数 参数: "intro_sub"=>"200" 说明: 文章摘要默认截取数,也可以指定数 参数: "ordersort...
网瑞企业网站管理系统简体中文版拥有企业网站常用的模块功能:企业简介模块、联系我们模块、新闻(文章)模块、产品模块、案例模块、招聘模块、在线留言反馈系统、友情链接、栏目管理、管理员与权限管理等等,所有网站...
摘要:ASP源码,企业建站,企业网站系统 网瑞科技企业网站管理系统简体中文版A... 本地测试请检查IIS是否开启父目录,数据库文件夹/data/、js广告生成文件夹/adfile/和上传附件文件夹/uploadfile/是否开有写入权限。
3) 增加上传及插入模板的功能,并在全部内置功能的演示中代替了插入EXCEL表格的功能(由于此功能需要服务器安装office2000,使用环境有限制,所以从演示中去掉,但保留此功能,有需要请自行在配置文件中增加...
迷你IIS服务器 提供 Microsoft IIS 5.0 兼容的 Active Server Pages 模块,不用修改代码直接将已经存在的使用 ASP 开发的应用程序移植到 迷你IIS服务器 平台上来,也可以直接使用已经存在所有 COM 组件。...
拥有企业网站常用的模块功能:企业简介模块、联系我们模块、新闻(文章)模块、产品模块、案例模块、招聘模块、在线留言反馈系统、友情链接、栏目管理、管理员与权限管理等等,所有网站代码不繁杂,可拓展性非常强大。...
不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 据我所知,JSP基于Java,...
查看每个人的个人资料,以查看他们的时间表以及他们如何获得所需的工作。 单击“让我到那里”并输入您当前的职位,以查找从您当前工作到您梦想工作的人。 数据 数据是使用 Scrapy ( ) Python 模块从 LinkedIn 获得...
本CMS采用容易调用的代码方式,简单调用即可构造各种形式的展示模块.可应用很多中小型网站.并且本CMS为开源免费提供广大用户使用. 安装方法: 将程序上传至服务器,导入说明中的witcms.sql数据。修改inc下的conn.php...
本CMS采用容易调用的代码方式,简单调用即可构造各种形式的展示模块.可应用很多中小型网站.并且本CMS为开源免费提供广大用户使用. 后台地址:admin/ 用户密码:adminadmin 目录安全:uploadfile是统一上传目录,只有这个...