歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

struts2文件上傳(保存為BLOB格式)

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved