Struts2文件上传与下载

一,页面 index.html

在页面中最重要的就是这个文件上传用的 form 表单,注意这里一定要把 form 的encyType属性明确标定为“multipart/form-data”,只有这样。表单才可能以二进制的形式上传到服务器。

<form action = "<%=contextPath%>/file/uploadImage.action" encytype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" value="上传"/>
</form>

  

二,业务处理类 FileAction

1,当页面中的文件上传表被提交时,上传的文件会被Struts拦截器处理。并被填充到与页面中相应的<input type="file">标签的name属性相同的File类型的属性中。因为上面的index.html页面中相应的标签name属性值为“upload”,那么在下面的程序中对应的属性就是这个 private File upload 属性。

同时有两个相关的string类型的属性也将被填充。一个是 String ##FileName属性(保存有上传文件的原名),一个是String ##ContentType属性(保存了上传文件的内容类型,如“text/plain”,"image/png")。##代表的同样是页面中相应的<input type="file">标签的name属性值。so,现在你已经拿到了代表被上传文件的 File 类型对象。现在你可以把它保存到本地文件夹,甚至上传到FTP服务器 (如果要操作FTP服务器,推荐使用Apache组织的 comment-net 工具包) 。

2,当要从服务器下载文件时,情况稍有不同。当下载时,Action业务类中相应的方法不可以再返回String类型的返回值,应当返回一个 InputStream 流对象。这个流对象的内容就应该是要被下载的文件(参见下面程序中的)。

public class FileAction extends ActionSupport{
    private File upload;
    private String uploadFileName;
    private String uploadContentType;
    //**不要忘了为这三个属性设置setter和getter方法**//

    /**
    * 文件存储过程
    */
        public String uploadFile(){
        //存储文件。。。。。。
        System.out.println(uploadFileName);
        return "success";
    }

    /**
    * 文件下载
    * @return 返回代表文件的输入流(为什么会返回输入流而不是输出流,因为写程序时请注意你的位置一直是“内存”,应    * 该站在内存的位置思考问题。现在要从存储介质上读取数据到服务器内存,然后再由服务器发送到客户端。所以从内存    * 的角度看,此方法的作用是在读入文件到内存。所以应当是文件输入流,文件内容流向你所在的位置。)
    */
    public InputStream getDownloadFile(){
        InputStream file = ********;//读取文件
        return ;
    }
}

  

三,struts.xml 配置文件

当使用Struts2进行文件上传时,在配置文件中并不能看出与普通action有何区别,这使得使用Struts2上传文件变得简单并普通。

当使用Struts2进行文件下时,情况略有不同,但是与普通Action的差别并不是很大,差别有以下几点:

1,此action不要指定method属性(原因见下面)。

2,该action只有一个result,且其name属性指定为“success” type属性必须为“stream”

3,这个唯一的result的内容不是一个页面路径。而是四个 param 属性

(1)contentType 指定下载内容的MIME类型

(2)contentDisposition 可以在此指定下载后的文件名称

(3)inputName 指定输入流的来源,上文说的不要为此action指定method就是因为这个属性的原因,在上面的FileAction类中 有个 getDownLoad 方法,下面xml文件中指定的inputName属性的值就是指定了这个方法。而这个方法正好返回一个InputStream对象。

(4)bufferSize 缓冲区大小。这个就不多说了。

<package name="file" namespace="/file" extends="struts-default">
    <action name="uploadImage" class="org.toybrick.strutsfile.FileAction" method="uploadFile">
        <result name="input">/index.html</result>
    </action>
    <action name="download" class="org.toybrick.strutsfile.FileAction">
        <result name="success" type="stream">
            <param name="contentType">image/png</param>
            <param name="contentDisposition">filename="iamge.png"</param>
            <param name="inputName">downloadFile</param>
            <param name="bufferSize">2048</param>
        </result>
    </action>
</package>

  

时间: 2024-10-05 06:00:14

Struts2文件上传与下载的相关文章

struts2学习(13)struts2文件上传和下载(1)

一.Struts2文件上传: 二.配置文件的大小以及允许上传的文件类型: 三.大文件上传: 如果不配置上传文件的大小,struts2默认允许上传文件最大为2M: 2097152Byte: 例子实现: com.cy.action.FileUploadAction.java: package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork

笔记:Struts2 文件上传和下载

为了上传文件必须将表单的method设置为POST,将 enctype 设置为 muiltipart/form-data,只有设置为这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器. 上传解析器配置 Struts2 没有提供自己的请求解析器,struts2 需要调用其他上传框架来解析二进制数据,struts2 默认使用 jakarta 的 Common-FileUpload 的文件上传框架,需要在 Web 应用的 lib 中增加 commons-io-2.2.jar 和 common

struts2文件上传和下载

1. struts系统中的拦截器介绍 过滤器:javaweb中的服务器组件,主要针对的请求和响应进行拦截. 拦截器:主要针对方法的调用,进行拦截器,当使用代理对象调用某个方法时候 对方法的调用进行拦截,对拦截到的方法可以进行扩展,增强 Struts2中的拦截器主要针对Action中方法的调用进行拦截 1 <interceptors> 2 <!-声明n个拦截器--> 3 <interceptor name="fileUpload" 4 class="

struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载

四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionSupport; public class FilesUploadAction extends Actio

Struts2学习总结——文件上传与下载

Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20

Struts2(二)文件上传和下载

struts2文件上传和下载 1.创建一个index.jsp界面 和success.jsp上传成功界面 index.jsp <%@ taglib prefix="s" uri="/struts-tags" %> <body> <s:form action="files/add" method="post" enctype="multipart/form-data"> &l

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

struts2 文件上传下载

四.文件的上传(拦截器)和下载(stream结果类型)(需要练一遍) 1.文件上传 必要前提: a.表单method必须是post: b.enctype取值必须是multipart/form-data: c.提供文件选择域. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-t

Struts2入门(七)——Struts2的文件上传和下载

一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST"方式,并且将enctype属性设置为"multipart/form-data",该属性的默认值为"application/x-www-form-urlencoded",就是说,表单要写成以下这种形式: <form action="" metho