/******************************************************************************* * 文件名: FileUploadAction.java <br> * 版本: <br> * 描述: 一個文件上傳,下載的Action,繼承於BaseAcion <br> * 版權所有: <br> * //////////////////////////////////////////////////////// <br> * 創建者: 趙志強 <br> * 創建日期: 2005-10-28 <br> * 修改者: 趙志強 <br> * 修改日期: 2005-11-3 <br> * 修改說明: 添加gotoUpload方法,用戶通過此方法跳轉到upload.vm <br> ******************************************************************************/ package com.css.action;
import java.io.FileInputStream; import java.io.InputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.BufferedOutputStream; import java.io.BufferedInputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.List; import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.*; import org.apache.struts.validator.DynaValidatorForm;
import com.css.bean.FileInfoDTO; import com.css.dao.DAOFactory; import com.css.dao.FileInfoDAO; import com.css.exception.BaseException; import com.css.util.db.DBConfig; import com.css.bean.UserDTO;
/** * @author WANG * * Java - 代碼樣式 - 代碼模板 */ public class FileUploadAction extends BaseAction {
public ActionForward fileUpload(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws BaseException {
//將字符統一爲gb2312 /* * String encoding = request.getCharacterEncoding(); if ((encoding != * null) && (encoding.equalsIgnoreCase("utf-8"))) { * //如果沒有指定編碼,編碼格式爲gb2312 response.setCon*("text/html; charset=gb2312"); } */
//取得DynaValidatorForm的值,通過theFile.get("FileUploadForm")取得上傳的文件 DynaValidatorForm fileUploadForm = (DynaValidatorForm) form; FormFile file = null; file = (FormFile) fileUploadForm.get("theFile"); String describe = fileUploadForm.getString("describe"); String permit = fileUploadForm.getString("permit");
//設置用戶權限不足時出現的錯誤,用戶將跳轉到download.vm--FileUpload.do?act=showFile UserDTO userDTO = getSessionObj(request); if (userDTO == null) { this.setSysMessage(request, "login.failAdmin", "btn.readmin", "FileUpload.do?act=showFile"); return mapping.findForward("error"); } //獲取FormFile的實例fileName中的兩個屬性 String fileName = file.getFileName();//取得文件名 //測試該文件是不是合法 if(!isValidFile(fileName)) { this.setSysMessage(request, "upload.badtype", "btn.reupload", "FileUpload.do?act=gotoUpload"); return mapping.findForward("error"); } int fileSize = file.getFileSize();//取得文件尺寸
//通過getInputStream()方法取得文件流 BufferedInputStream bis = null; BufferedOutputStream bos = null; InputStream is = null; OutputStream fos = null;
try { is = (InputStream) file.getInputStream();//把文件讀入 bis = new BufferedInputStream(is); String filePath = getUploadDir();//取當前系統路徑 fos = new FileOutputStream(filePath + fileName);//建立一個上傳文件的輸出流 bos = new BufferedOutputStream(fos); //System.out.println(filePath + fileName);
//文件最大限額 int fileMaxSize = 10 * 1024 * 1024;
if (fileSize > fileMaxSize) { //文件大小不能超過fileMaxSize,如果超過,報"上傳文件尺寸超過10M"錯誤; this.setSysMessage(request, "upload.max", "btn.reupload", "FileUpload.do?act=gotoUpload"); return mapping.findForward("error"); } int bytesRead = 0; byte[] buffer = new byte[5 * 1024]; while ((bytesRead = bis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead);//將文件寫入服務器 } } catch (IOException e) { //設置文件物理上傳出現問題時的出現的錯誤信息 this.setSysMessage(request, "upload.failed", "btn.reupload", "FileUpload.do?act=gotoUpload"); return mapping.findForward("error"); } finally { if (bos != null) {
try { bos.close(); } catch (IOException e) { System.err.print(e); } } if (bis != null) { try { bis.close(); } catch (IOException e) { System.err.print(e); } }
} //文件物理上傳完成 //將文件信息添加到數據庫 //填充FileInfoDTO FileInfoDTO dto = new FileInfoDTO(); dto.setCheckType("1"); dto.setDescribe(describe); dto.setFileName(fileName); dto.setFileSize(String.valueOf(fileSize)); dto.setIsUse("0"); dto.setPermit(permit); dto.setUserID(userDTO.getUserId());
FileInfoDAO fileinfoDAO = (FileInfoDAO) DAOFactory.getDAOFactory( DBConfig.getDataBaseName()).getFileInfoDAO(); int result = fileinfoDAO.insert(dto); //request.setAttribute("dat",file.getFileName()); if (result > 0) { return mapping.findForward("gotoUpload"); } else { //設置文件寫入數據庫時出現的信息 this.setSysMessage(request, "upload.failed", "btn.reupload", "FileUpload.do?act=gotoUpload"); return mapping.findForward("error"); } }
public ActionForward fileDownLoad(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws BaseException { /* * 取得文件:文件id+文件路徑+文件名+流 文件id=通過formbean取得 文件路徑=通過取得配置文件的方法得到 * 文件名稱=通過數據庫得到 流=io */ //取得文件路徑,也就是保存文件的文件夾名稱 String fileID = null;//文件id String filePath = null;//方法取得路徑 String fileName = null;//名稱 String permit = null; //權限,用來作身份驗證
BufferedInputStream bis = null; BufferedOutputStream bos = null; OutputStream fos = null; InputStream fis = null;
// DynaValidatorForm fileUploadForm = (DynaValidatorForm) form; // fileID = fileUploadForm.getString("fileID");//得到文件id fileID = request.getParameter("fileID"); filePath = getUploadDir(); FileInfoDAO fileinfoDAO = (FileInfoDAO) DAOFactory.getDAOFactory( DBConfig.getDataBaseName()).getFileInfoDAO();
FileInfoDTO fileInfoDTO = fileinfoDAO.findByPK(fileID); if(fileInfoDTO == null) { this.setSysMessage(request, "download.failed", "btn.redownload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); } fileName = fileInfoDTO.getFileName(); permit = fileInfoDTO.getPermit(); //身份驗證 UserDTO userDTO = this.getSessionObj(request); if(userDTO == null) { this.setSysMessage(request, "login.failAdmin", "btn.redownload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); } else if(!userDTO.getUserType().equals(fileInfoDTO.getPermit())) { this.setSysMessage(request, "login.failAdmin", "btn.redownload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); } if (fileName == null) { //設置查找數據時出現的錯誤信息 this.setSysMessage(request, "download.failed", "btn.redownload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); }
try { response.setContentType(this.getContentType(fileName)); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); fis = new FileInputStream(filePath + fileName); bis = new BufferedInputStream(fis); fos = response.getOutputStream(); bos = new BufferedOutputStream(fos);
int bytesRead = 0; byte[] buffer = new byte[5 * 1024]; while ((bytesRead = bis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead);//將文件發送到客戶端 } } catch (IOException e) { // response.setContentType("text/html"); response.reset(); //設置文件物理下載時出現的錯誤信息 this.setSysMessage(request, "download.failed", "btn.reupload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); } finally { try { if (fos != null) { fos.close(); } if (bos != null) { bos.close(); } if (fis != null) { fis.close(); } if (bis != null) { bis.close(); } } catch (IOException e) {
System.err.print(e); } }
return null; }
public ActionForward showFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws BaseException { /* * 用戶下載的方法, 用戶可以看到和下載和自己權限一樣的文件和所有遊客權限的文件 */ UserDTO userDTO = getSessionObj(request); boolean isLogin = true; boolean isCheck = false; String userType = null; if (userDTO == null) { isLogin = false; } else { if (userDTO.getIsCheck().equals("1")) { isCheck = true; } } /* * 獲取權限後, 連接數據庫, 查找權限爲permit,以及4(遊客權限)的所有權限, 並生成List對象通過request發送給客戶. */
//連接數據庫 FileInfoDAO fileinfoDAO = (FileInfoDAO) DAOFactory.getDAOFactory( DBConfig.getDataBaseName()).getFileInfoDAO();
//查找並將數據保存在List對象中.
List list = new ArrayList(); //從FILEINFO表和USERS表中查找需要的數據存放在每一個FileInfoDTO中.
//判斷用戶的權限:isCheck=ture=審覈人員,isLogin=內部用戶或者外部用戶,客戶。其他爲遊客。 if (isCheck) { list = fileinfoDAO.findAll(); } else { if(isLogin) { userType = userDTO.getUserType(); list = fileinfoDAO.findAll(userType, isLogin); } else { userType = "4"; list = fileinfoDAO.findAll(userType, isLogin); } } //將數據保存在request中 request.setAttribute("fileList", list); request.setAttribute("userDTO", userDTO); return mapping.findForward("fileDownload"); }
public ActionForward gotoUpload(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws BaseException { //用戶通過此方法跳轉到upload.vm UserDTO userDTO = getSessionObj(request); if (userDTO == null) { //設置用戶權限不足時出現的錯誤,用戶將跳轉到download.vm--FileUpload.do?act=showFile this.setSysMessage(request, "login.failAdmin", "btn.redownload", "FileUpload.do?act=showFile"); return mapping.findForward("error"); }
return mapping.findForward("fileUpload"); }
private boolean isValidFile(String fileName) { String[] validFiles = { "txt", "gif", "jpg", "jpeg", "jpe", "zip", "rar", "doc", "ppt", "xls", "html", "htm", "tif", "tiff", "pdf" }; boolean ret = false; for (int i = 0; i < validFiles.length; i++) { if (fileName.toLowerCase().endsWith(validFiles[i])) { ret = true; break; } } return ret; }
private String getContentType(String fileName) { String fileNameTmp = fileName.toLowerCase(); String ret = ""; if (fileNameTmp.endsWith("txt")) { ret = "text/plain"; } if (fileNameTmp.endsWith("gif")) { ret = "image/gif"; } if (fileNameTmp.endsWith("jpg")) { ret = "image/jpeg"; } if (fileNameTmp.endsWith("jpeg")) { ret = "image/jpeg"; } if (fileNameTmp.endsWith("jpe")) { ret = "image/jpeg"; } if (fileNameTmp.endsWith("zip")) { ret = "application/zip"; } if (fileNameTmp.endsWith("rar")) { ret = "application/rar"; } if (fileNameTmp.endsWith("doc")) { ret = "application/msword"; } if (fileNameTmp.endsWith("ppt")) { ret = "application/vnd.ms-powerpoint"; } if (fileNameTmp.endsWith("xls")) { ret = "application/vnd.ms-excel"; } if (fileNameTmp.endsWith("html")) { ret = "text/html"; } if (fileNameTmp.endsWith("htm")) { ret = "text/html"; } if (fileNameTmp.endsWith("tif")) { ret = "image/tiff"; } if (fileNameTmp.endsWith("tiff")) { ret = "image/tiff"; } if (fileNameTmp.endsWith("pdf")) { ret = "application/pdf"; } return ret; } }
|