`
gaoyu
  • 浏览: 273961 次
  • 来自: 云南大理
社区版块
存档分类
最新评论

struts2实现文件的上传、下载

阅读更多

 

struts2实现文件的上传、下载

struts2实现文件的上传、下载

struts2能实现上传、下载是基于组件commons-fileupload-1.2.2.jarcommons-io-2.0.1.jar

 

表单元素的enctype属性,

表单的enctype属性指定的是表单数据的编码方式,该属性有如下3个值:

application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。

multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。

text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件的方式。

我们根据例子来分析:

jsp页面:

<s:form action=”uploadAction”method=”post” enctype=multipart/form-data>

     <s:label  name=”file”   /> <s:file  />

     <s:submit  value=”上传” />

<s:form> 

 

UploadAction :

public  class  UploadAction  extends ActionSupport {

     private String file;//这里的名字要和JSP参数名一样,(为了set方法);

     private String fileFileName; //参数名+FileName,必须这样。保存文件真正的名字

     private String fileContentType; //参数名+ContentType,必须这样。保存文件真正的类型

 

     /*

* get/set方法

*/

 

public String execute() throws Exception {

     //JSPform将表单内容以二进制的形式传参给action

     //这时,actionfile保存了上传的文件。

     //获得file的路径

    System.out.println(file.getAbsolutePath());

}    

}

注:

     上例,我机子上的运行结果如下:

 

     文件上传后,struts2会先临时将这个文件保存起来,struts.multipart.saveDir 用来指定临时文件保存位置。struts.multipart.saveDir=null(没指定)的话会保存到服务器中的一个位置。

      配置struts.multipart.saveDir有两种方式:

  1. struts.xml中配置,<constant name="struts.multipart.saveDir" value="/tmp"/>
  2. 写个sturt.propertiesstruts.multipart.saveDir=/temp

struts2默认上传文件最大是2M我们可以修改配置文件来更改大小(以字节为单位)

  1. struts.xml中配置,<constant name="struts.multipart.maxSize" value="10701096"/>
  2. struts.properties中配置,  struts.multipart.maxSize=10701096

注:

        struts.properties中的配置都可以放到struts.xml中用constant配置。

好了,现在进入正题:

单个文件上传:

public String execute() throws Exception {

     //webRoot下建个文件夹,用来存放上传来的文件,“upload”

    //其实这个文件只是一个映射,真正保存文件的uploadTomcat那里。

    //获得Tomcatupload的真实路径。

String  realPath = ServletActionContext

                                     .getRequest()

                                     .getSession()

                                     .getServletContext()

                                     .getRealPath(“upload”);

//通过真实路径+真实文件名,完全将文件copy过来。

File  theCopy = new File(realPath, fileFileName);

 

//输入流插到临时文件上,读数据。输入,输出,都是相对于程序。

InputStream is = new FileInputStream(file);

//输出流插到新文件上,写数据。

OutputStream os = new OutputStream(theCopy);

 

//一个缓冲字节数组。

byte[] buffer = new byte[];

int length=0;

//开始copy

while ( (length=is.read(buffer0)) != -1 ) {

              os.write(buffer, 0, length);

}

}

//临时文件的删除?

多个文件上传:

   多个文件的上传跟单个文件上传类似,只是操作的是一个集合而已。

   例子如下:

   jsp页面:

    <s:from  action=”upload” method=”post” enctype=”multipart/form-data”>

              <! - - 上传的所有参数必须是一个名,struts将它们封装成一个集合-- >

              <s:file  name=”files”> <br />  

              <s:file  name=”files”> <br />

              <s:submit value=”上传” />

       </s:form>

     action

            public  class UploadFileAction extends ActionSupport {

                     private  List<File>  files;

                     private  List<String>  filesFileName;

                     private  List<String>  filesContentType;

 

                     //getset方法

                     

                     public  String  execute( ) throws  Exception {

                            String realpath = ServletActionContext

.getRequest()

.getSession() 

.getServletContext()

.getRealPath("upload");

                            for(int i=0;  i<files.size(); i++ ) {

                                   File  copy  =  new  File(realpath, filesFileName.get(i) );

                                   inputStream  is = new  FileInputStream ( files.get(i) );

                                   OutputStream  os  = new FileOutputStream (copy );

 

                                   byte[]  buffer = new  byte[];

                                   int  length = 0;

                                   while( ( length =is.read(buffer) ) != -1 ) {

                                          os.write( buffer, 0, length );

                                   }

                            }

 

                            return SUCCESS;

                     }  

              }

文件下载:

    action:

    public  class DownloadFileAction  extends  ActionSupport {

          

         private String fileName;

         private  InputStream  downloadFile;

 

              //主要的方法

        public InputStream  getDownloadFile() {

              try {

                //模拟根据条件下载对应的文件

                if( num == 1 )

                        //将制定的文件作为一个流返回出去;

                    return  return ServletActionContext

                                        .getServletContext()

                                        .getResourceAsStream("/upload/xxoo.jpg");

                else

                       //将制定的文件作为一个流返回出去;

                       return  return ServletActionContext

                                               .getServletContext()

                                               .getResourceAsStream("/upload/jj.txt");

 

                   } catch (Exception e) {

                       e.printStackTrace();

                   }

              return  null;

         }

 

         public String  getFileName() {

              return this.fileName;

         }

 

         public  String  execute() throws Exception {

              return SUCCESS;

         }

     }

    struts配置

    <struts >

        <! – 指定,文件上传时临时文件的位置- - >

        <constant  name=”struts.multipart.saveDir” value=”/upload” />

         <action  name=”download” class=”action.DownloadFileAction” >

            <!- - 要注意result的类型是stream - - >

            <result  name=”success” type=”stream” >

<!—inputName参数指定文件的源头,根据这个配置,找getDownloadFile方法获得文件流 - ->

                <param  name=”inputName”>downloadFile</param>

<!—指定下载的方式,默认的是inline,这种方式,浏览器如果能打开的文件的话,就直接打开,而不会下载(如.txt格式文件)。一般指定是attachment方式,让用户可以选择是打开还是下载。- - >

                <param 

name=”contentDisposition”>attachment;filename=”xxoo.jpg”</param>

<! – 如果想不写死文件的话,”xxoo.jpg”可以换成${fileName},action里必须提供fileNameget方法- - >

             </result>

     </struts>

 

jsp页面:

 

<a  href = “download.action?num=1”>下载文件</a>

 

    还可以指定文件的格式,缓冲大小,如:

     

 <result name="success" type="stream">

          <param name="contentType">image/jpeg</param>

          <param name="inputName">imageStream</param>

 <param name="contentDisposition">attachment;filename="document.pdf"</param>

          <param name="bufferSize">1024</param>

 </result>

 

分享到:
评论

相关推荐

    struts2实现文件上传下载

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

    Struts2实现文件的上传下载

    在Struts2中,文件上传主要依赖于`org.apache.struts2.components.FileUpload`组件,这个组件是基于Commons FileUpload库实现的,它能够处理multipart/form-data类型的HTTP请求,这是文件上传所必需的格式。...

    Struts2实现文件上传下载

    以上是Struts2实现文件上传和下载的基本步骤和关键概念。在实际应用中,你可能还需要考虑性能优化、错误处理、用户体验等方面。阅读博文(https://chenzheng8975.iteye.com/blog/1733841)将为你提供更具体的实现...

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

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

    struts2实现多文件上传下载

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

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

    通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...

    Struts2实现文件上传

    在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的文件上传功能。 首先,我们注意到一个细节描述:“private String uploadContextType;应更正为private String ...

    struts2文件上传下载源代码

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

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    Struts2实现文件上传功能

    下面将详细阐述如何使用Struts2来实现文件上传功能。 1. **Struts2文件上传组件** Struts2框架集成了一个名为`struts2-convention-plugin`的插件,它提供了文件上传的支持。主要依赖于`Commons FileUpload`和`...

    使用Struts2实现文件上传和下载的所有方案

    在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...

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

    Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...

    struts2 实现文件批量上传

    本项目实现了使用Struts2进行文件批量上传的功能,这涉及到几个关键的技术点,包括文件上传组件的选择、前端表单设计、后端处理逻辑以及存储策略。 1. **文件上传组件**:在Struts2中,我们通常使用`Commons ...

    struts1 实现文件上传下载

    在Struts1中实现文件上传和下载是常见的需求,这通常涉及到用户通过Web界面交互地上传文件到服务器,或者从服务器下载文件到本地计算机。 一、文件上传 1. **配置ActionForm**:首先,你需要创建一个继承自Struts...

    eclipse下利用struts2实现文件的上传和下载

    以上是使用Struts2在Eclipse环境下实现文件上传和下载的基本步骤和关键知识点。具体实现可能需要根据项目需求进行调整,但这些指导原则能帮助你构建一个基本的文件管理功能。在实际项目中,务必注意代码的健壮性和...

    struts2文件上传下载

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

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

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

    swfuplaod+struts2实现多文件上传

    在实现文件上传时,必须注意以下安全问题: 1. **文件类型检查**:限制上传的文件类型,防止恶意用户上传可执行文件或脚本。 2. **文件名重命名**:避免文件覆盖或路径遍历攻击,对上传的文件名进行重命名。 3. **...

Global site tag (gtag.js) - Google Analytics