`
daha33
  • 浏览: 52464 次
社区版块
存档分类
最新评论

struts 实现文件上传与下载

阅读更多
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;
      }
}

分享到:
评论

相关推荐

    struts实现文件上传与下载

    本篇文章将深入探讨如何在Struts框架下实现文件的上传与下载功能。 ### 文件上传 1. **准备环境**:首先,确保你的项目已经集成了Struts2框架,包括相关的jar包,如struts2-core、struts2-convention-plugin等,并...

    struts实现的文件上传下载功能

    总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。

    struts与hibernate实现文件的上传与动态下载

    本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts实现文件上传和下载源代码

    在这个"struts实现文件上传和下载源代码"项目中,我们将会探讨如何使用Struts框架来实现在Web应用中进行文件的上传和下载功能,同时还会关注对于大文件(超过3MB)的处理策略。 1. **文件上传** 文件上传是Web应用...

    struts 实现文件上传与下载.rar

    下面将详细介绍如何在Struts中实现文件上传与下载。 **1. 文件上传** 文件上传在Struts中主要通过`Apache Commons FileUpload`库来实现,这个库提供了解析多部分表单数据的能力。以下是一些关键步骤: 1. **配置...

    struts2文件上传下载源代码

    描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...

    struts2文件上传与下载

    Struts2是一个非常流行的...以上就是Struts2中文件上传与下载的基本实现,通过这些步骤,你可以实现用户在Web应用中上传和下载文件的功能。在实际项目中,还需要根据具体需求进行调整和优化,如错误处理、进度显示等。

    Struts实现文件上传、下载(导入直接运行)

    在这个特定的场景中,我们讨论的是如何使用Struts来实现在Web应用中进行文件的上传和下载功能,并且修复了在下载过程中取消操作可能导致的错误。 文件上传是Web应用中常见的一种需求,比如用户可能需要上传图片、...

    struts 文件上传 Struts实现文件上传

    下面将详细介绍Struts 实现文件上传的相关知识点。 ### 1. Struts 框架概述 Struts 是Apache软件基金会下的一个开源项目,其主要目标是提供一个可扩展且易于维护的架构,用于构建企业级的Java Web应用。它通过分离...

    Struts2文件上传与下载

    以下是实现文件上传的关键步骤: 1. **配置Struts2拦截器**:在`struts.xml`配置文件中,确保已经启用文件上传拦截器。添加以下配置: ```xml &lt;interceptor name="fileUpload" class="org.apache.struts2....

    struts2实现多文件上传下载

    网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载...

    struts2文件上传和下载

    Struts2是一个非常流行的Java Web框架,用于构建企业级应用...通过以上步骤,开发者可以在Struts2框架下实现文件上传和下载功能,满足用户对数据交换的需求。但一定要注意安全性和性能优化,以确保应用的稳定和健壮。

    Struts2实现文件的上传下载

    总的来说,Struts2通过内置的拦截器和便捷的API,使得文件上传下载变得简单而高效。尽管本项目没有使用异步(AJAX)方式,但在实际应用中,结合AJAX进行无刷新的文件上传和下载也是常见的优化手段,可以提升用户体验...

    struts1和struts2分别实现文件上传下载功能

    总的来说,Struts1和Struts2在文件上传下载上的实现各有特点,Struts1更注重于配置,而Struts2则提供了更为灵活的编程模型。理解这两个框架的处理机制有助于你更好地实现和优化Web应用中的文件操作功能。在实际项目...

    Struts2.0 文件上传与下载全解析

    在Struts2中,文件上传和下载是常见的需求,尤其对于处理用户交互和数据交换的Web应用来说。本篇文章将全面解析Struts2.0中的文件上传和下载流程。 ### 文件上传 文件上传的核心在于`multipart/form-data`编码类型...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    Struts实现文件的上传下载

    在Struts中实现文件的上传和下载是一项常见的功能需求,对于用户交互和数据传输至关重要。以下将详细讲解如何使用Struts来完成这一任务。 首先,我们需要理解Struts处理文件上传的基本流程。当用户在表单中选择文件...

    用struts 实现文件上传下载

    本文将详细介绍如何使用Struts实现文件的上传和下载。 **1. 文件上传** 文件上传主要涉及到以下几个步骤: 1. **配置Struts配置文件**:在struts-config.xml中,你需要定义一个Action,这个Action将处理文件上传...

Global site tag (gtag.js) - Google Analytics