struts2文件上傳(保存為BLOB格式)
Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm
Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm
遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm
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;
}
OK.本人親測
時間關系,沒有來得及注釋的,下次補上。
Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡