Struts2:上传下载

ud_upload.jsp

    <s:form action="fileupload" enctype="multipart/form-data">
        <s:textfield label="照片描述" name="desc"></s:textfield>
        <s:file label="文件1" name="file1"></s:file>
        <s:submit value="上传"></s:submit>
    </s:form>

ud_download.jsp

    <s:url var="temp1" action="filedownload" ></s:url>
    <s:a href="%{temp1}" >下载bload.png</s:a>

struts.xml

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.configuration.xml.reload" value="true" />
    <constant name="struts.custom.i18n.resources" value="messageResource" />
    <package name="p1" namespace="/" extends="struts-default">
        <action name="fileupload" class="org.ah.s2.C1" method="fileupload">
            <!-- 上传需要(自带)拦截器,传入参数 -->
            <interceptor-ref name="fileUpload">
                <!-- 定义允许上传的类型 -->
                <param name="allowedTypes">image/jpeg,image/png</param>
                <!-- 文件大小,单位:byte,不能用乘法计算,只能写最终数字 -->
                <!-- 35k -->
                <param name="maximumSize">35850</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack" />
            <result name="success" type="dispatcher">
                /ud_download.jsp
            </result>
            <!-- 文件被过滤掉,将返回input -->
            <result name="input">/ud_upload.jsp</result>
        </action>

        <action name="filedownload" class="org.ah.s2.C1" method="filedownload">
            <!-- 只有一个result子元素,不用name -->
            <result type="stream">
                <param name="contentType">image/png</param>
                <!-- fileName对应下载后的文件名,这里就用Action中的变量了 -->
                <param name="contentDisposition">attachment;fileName=${downLoadAh}</param>
                <param name="inputName">inputStream</param>
            </result>
        </action>
    </package>
</struts>
image/jpeg,不是jpg!如果上传的文件不符合指定的要求,会回显错误信息。这些错误信息基于i18n,存放在struts-messages.properties配置文件中,所以需要配置struts.custom.i18n.resources

Action:

package org.ah.s2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class C1 extends ActionSupport {
    private String desc;// 描述
    private File file1;// 上传文件。java.io

    // 以下变量直接可得,文件名file1+固定后缀,都需要getter setter方法
    private String file1FileName;// 上传文件名
    private String file1ContentType;// 上传文件类型

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public File getFile1() {
        return file1;
    }

    public void setFile1(File file1) {
        this.file1 = file1;
    }

    public String getFile1FileName() {
        return file1FileName;
    }

    public void setFile1FileName(String file1FileName) {
        this.file1FileName = file1FileName;
    }

    public String getFile1ContentType() {
        return file1ContentType;
    }

    public void setFile1ContentType(String file1ContentType) {
        this.file1ContentType = file1ContentType;
    }

    /**
     * 文件上传
     *
     * @return
     * @throws IOException
     */
    public String fileupload() throws IOException {

        // \t:制表符
        System.out.println("File name:" + this.file1FileName + "\t"
                + "ContentType:" + this.file1ContentType + "\t" + "描述:"
                + this.desc);

        // 文件拷贝
        FileInputStream fis = new FileInputStream(this.file1);

        FileOutputStream fos = new FileOutputStream("D:\\fileupload\\"
                + this.file1FileName);

        byte[] bs = new byte[1024];
        int real = fis.read(bs);
        while (real > 0) {
            fos.write(bs, 0, real);
            real = fis.read(bs);
        }

        fos.close();
        fis.close();

        return Action.SUCCESS;
    }

    // --------------------------------------------------

    // 下载时默认名称,只需getter方法即可
    private String downLoadAh;
    public String getDownLoadAh() {
        return downLoadAh;
    }

    /**
     * 文件下载
     * @return
     */
    public String filedownload() {
        downLoadAh = "border_1.png";
        return Action.SUCCESS;
    }

    // 用于下载的文件输入流   // 对应:<param name="inputName">inputStream</param>    public InputStream getInputStream() {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(new File("D:\\fileupload\\"
                    + downLoadAh));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return fis;
    }
}

messageResource.properties

struts.messages.error.file.too.large=\u6587\u4EF6\u592A\u5927
struts.messages.error.file.extension.not.allowed=\u6587\u4EF6\u7C7B\u578B\u4E0D\u5339\u914D
struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u7C7B\u578B\u4E0D\u6B63\u786E

时间: 2024-10-07 02:33:10

Struts2:上传下载的相关文章

Struts2 上传下载

后台代码: public String getFileName() { String fileName = this.getRequest().getParameter("fileName"); String downloadFileName = fileName; try { } catch (Exception e) { e.printStackTrace(); } return downloadFileName; } // 下载的流 public InputStream getI

struts2上传下载

struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.

Struts2 文件上传,下载,删除

本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用FileUtil上传 6.使用IOUtil上传 7.使用IOUtil上传 8.使用数组上传多个文件 9.使用List上传多个文件 ----1.基于表单的文件上传----- fileupload.jsp <body> <form action="showFile.jsp" na

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

【SSH2(实践篇)】--Struts2文件上传下载实例

上篇文章又一次回顾了Struts2的运行机制,对它的运行步骤做了一步步的解析,这个解析不但再一次理清了Struts2的使用方法,而且对它的映射机制进行了深入的解析,并在最后通过一个实例来介绍了Struts2的一种使用方法,这里将做一个有关文件上传下载的实例. 一.文件上传 Struts2并没有提供文件上传的组件,所以想要实现上传的功能就必须通过第三方组件来实现,在Struts2引用的jar中包含了文件上传的组件,它是通过commons-fileupload.jar和commons-io.jar来

[JavaWeb基础] 009.Struts2 上传文件

在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因为文件上传时二进制文件可能会很大,还有就是enctype属性, 这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端 --> <form action="fileUpload.action" method="post"

ssh框架文件上传下载

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Author" content="BuNuo"> <meta name="Keywords" content="文件上传下载"> <meta name="

java上传下载功能的实现

上传下载是很简单的功能,但是每次用的时候还是要查,这里整理一下 前台:   <form action="xxoo.do" enctype="multipart/form-data" method="post"> <input type="file" name="file" />  <button type="submit" class="btn b

文件上传(多文件上传)/下载

通常我们会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就文件下载和多文件上传的源代码进行一下讲 文件上传 首先先创建jsp页面(用于多文件上传) <%@ page language="java" import="java.util.