struts2文件上传(保存为BLOB格式)
html文件:提供上传文件的入口
<input type="file" name="upload"><!-- name很重要,与后面action文件对应 -->
xml文件:
<!-- 上传资料 -->
<action name="upload" class="web.FileUploadAction" method="execute">
<!-- 上传成功,返回 -->
<result name="success">success_commit.jsp</result>
<result name="error">error.jsp</result>
</action>
action文件:
public class FileUploadAction {
private String remark;// 备注
private int id;// id
private File upload;// 与html文件中input[type=file]必须一样
private String uploadFileName;// 文件名,必须这样写,upload和html文件中input[type=file]必须,FileName
ResultService rService = new ResultService();
public String execute() {
try {
// 点击上传之后
// 保存上传数据
int row = 0;
// 检查是否上传了文件
if (uploadFileName != null && !uploadFileName.equals("")) {
//考虑到需要保存文件进行的操作比较多,上传了文件另外保存
row = rService.save(upload, uploadFileName, demandid,
remark);
} else {
// 没有上传文件
row = rService.save(demandid, remark);
}
if (row == 1) {// 修改的行数
// 上传成功
return "success";
} else {
//上传失败
return "error";
}
} catch (Exception e) {
return "error";
}
}
// 以下是getter/setter方法(略去)
}
service层
public int save(File file, String filename, int id, String remark) {
// 有文件保存方法
String lj = copyfile(file, filename);
Result res = new Result();
res.setFile(new File(lj));
res.setDemandid(id);
res.setRemark(remark);
res.setTitle(filename);
return rDao.saveResult(res);
}
//没有文件的保存方法
public int save(int id,String remark){
Result res = new Result();
res.setDemandid(id);
res.setRemark(remark);
return rDao.saveResultNoFile(res);
}
public String copyfile(File file, String filename) {
// 把文件拷贝到服务器的指定目录下
String realpath = ServletActionContext.getServletContext().getRealPath(
"/info");
String lj = realpath + "\\" + filename;
try {
if (file != null) {
File savefile = new File(new File(realpath), filename);
if (!savefile.getParentFile().exists()) {
savefile.getParentFile().mkdirs();
}
// 调用copyFile方法
FileUtils.copyFile(file, savefile);
}
} catch (Exception e) {
e.printStackTrace();
}
return lj;
}
dao层(与数据库进行交互)
public int saveResult(Result res) {// 保存有文件的
int row = 0;
Connection conn = null;
PreparedStatement ps = null;
String sql = "insert into result(id,content,remark,time,title,demandid) values(id_result.nextval,?,?,?,?,?)";// Oracle数据库
// id_result 序列号
try {
conn = DBUtil.getConn();
File file = res.getFile();
FileInputStream fis = new FileInputStream(file);
ps = conn.prepareStatement(sql);
int len = (int)file.length();
ps.setBinaryStream(1, fis, len);
ps.setString(2, res.getRemark());
ps.setLong(3, System.currentTimeMillis());
ps.setString(4, res.getTitle());
ps.setInt(5, res.getDemandid());
row = ps.executeUpdate();
fis.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, null);
}
// 返回修改的行数
return row;
}
struts2文件上传(保存为BLOB格式)的更多相关文章
- Struts2文件上传下载
Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...
- struts2文件上传,文件类型 allowedTypes
struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...
- 学习Struts--Chap07:Struts2文件上传和下载
1.struts2文件上传 1.1.struts2文件上传的基本概述 在开发web应用的时候,我们一般会为用户提供文件上传的功能,比如用户上传一张图像作为头像等.为了能上传文件,我们必须将表单的met ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- Struts2文件上传和下载(原理)
转自:http://zhou568xiao.iteye.com/blog/220732 1. 文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1) ...
- Struts2 文件上传
一:表单准备 ① 要想使用HTML 表单上传一个或多个文件 –须把 HTML表单的 enctype属性设置为multipart/form-data –须把HTML 表单的method ...
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
随机推荐
- Realsense 提取彩色和深度视频流
一.简要介绍 关于realsense的介绍,网上很多,这里不再赘述,sdk及相关文档可参考realsense SDK,也可参考开发人员专区. 运行代码之前,要确保你已经安装好了realsense的DC ...
- zookeeper 系列
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂易出错的关键服务 ...
- cc2530 makefile简略分析 <contiki学习之三>
前面将contiki的makefile框架都理了下,这篇就以cc2530为收篇吧,也即makefile分析就该到此为止了. contiki/examples/cc2530dk 打开Makefile如下 ...
- SkinSharp用法
SkinSharp又称Skin#,是很好用的一款轻量化的VC程序美化工具 官网地址是http://www.skinsharp.com/ 尽管SkinSharp是收费软件,但提供试用版,并且比較厚道,试 ...
- 基于Linux的owncloud搭建
为了保证一个纯净的环境,我重新安装了一台centos系统 [root@localhost httpd-2.2.23]# lsb_release -a LSB Version: :base-4.0 ...
- int *(*a[5])(int, char*)
int* 表示是一个int型指针;(*a[5])(int, char*)中的a[5]表示是一个有5个元素的数组,而(*)(int, char*)则表示指向一个函数的指针,该函数有两个参数,第一个参数为 ...
- 项目源码--Android应用商店源码
下载源码 技术要点: 1.互联网应用 客户端框架 2.综合应用开发所 有技术 3.安装应用的管理 4. HTTP网络通信技 术 5.下载安装.评论 框架 6.使用.版本升级 等统计方案 7.源 ...
- 基于ActiveMQ的统一日志服务
概述 以ActiveMQ + Log4j + Spring的技术组合,实现基于消息队列的统一日志服务. 参考:Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 与参考文章的比较 ...
- 使用mii-tool设置网卡速率
转载:http://washion2008.blog.163.com/blog/static/144227201001711537158/ 在ubuntu中,mii-tool 是属于net-tools ...
- [Qt5] 减少dll依赖和大小(特别是webkit的大小和依赖)
Qt5的依赖太多, 而且很dll非常大. 折腾了好久, 摸索了一些精简的方法. webkit是个非常蛋疼的东西, 依赖超多, 又很庞大. 所以需不需要webkit是完全不同的. 如何编译Qt5可以参考 ...