• Struts2 之 实现文件上传(多文件)和下载


    Struts2  之 实现文件上传和下载

    必须要引入的jar

     

    commons-fileupload-1.3.1.jar

    commons-io-2.2.jar

    01.文件上传需要分别在struts.xml配置 和 创建文件上传必要的类、

    Jsp页面的截图

     

    Struts.xml中的配置

    配置上传需要的savePath(文件上传路径)和 指定文件上传的类

     

    <action name="upload" class="cn.wz.upload.action.UploadAction" >

    <param name="savePath">/upload</param>

    <result name="success">success.jsp</result>

    </action>

    UploadAction类中的配置

    该类需要继承自ActionSupport ,重写它的execute方法。

    还要设置几个必要的属性:

    uploadFileName(文件名)

    savePath(文件保存路径地址)

    uploadContentType(上传文件的类型)

    File file(该属性的类型是File类型,封装了上传文件的属性)

    public String execute() throws Exception {

    byte[] bytes=new byte[1024];

    FileInputStream fis=new FileInputStream(getUpload());

    FileOutputStream fos=new FileOutputStream(getSavePath()+"\"+getUploadFileName());

    int lenth=fis.read(bytes);

    while (lenth>0) {

    fos.write(bytes, 0, lenth);

    lenth=fis.read(bytes);

    }

    fis.close();

    fos.flush();

    fos.close();

    return SUCCESS;

    }

    省略getset方法...

    public String getSavePath() {

    return ServletActionContext.getServletContext().getRealPath(savePath);

    }

     

    02.实现多文件上传、实现多文件上传的操作非常简单,在表单中添加多个相同的name属性的File控件,这样当表单提交时,将会提交一个数组。因此,只需要在上传Action中将原本处理单个文件的操作改成对集合的操作即可。

    public String execute() throws Exception {

    byte[] bytes=new byte[1024];

    for (int i = 0; i < upload.length; i++) {

    FileInputStream fis=new FileInputStream(getUpload()[i]);

    FileOutputStream fos=new FileOutputStream(getSavePath()+"\"+getUploadFileName()[i]);

    int lenth=fis.read(bytes);

    while (lenth>0) {

    fos.write(bytes, 0, lenth);

    lenth=fis.read(bytes);

    }

    fis.close();

    fos.flush();

    fos.close();

    }

    return SUCCESS;

    }

    03.文件下载、Struts2为了支持文件的下载,提供了Stream结果类型,该类型的作用就是专门用于实现文件下载功能。

    Stream结果类型。

    该类型在实现文件下载功能时需要指定一个输入流,即inputStream参数,通过这个流就可以输出下载的文件内容。我们可能还需要对相关的参数进行配置,如MIME类型、HTTP请求头信息、缓冲区的大小等。

    Stream结果了类型的配置参数

    contentType:发送到浏览器的MIME类型。

    contentLength:设置文件的大小。

    contentDisposition:设置响应的inputStream类型的属性名称。

    inputName:指定Action中提供的inputStream类型的属性名称。

    bufferSize:读取和下载时的缓冲区大小。

    文件下载(当前示例是在jsp页面有一个指向固定的文件地址的链接,来实现文件下载的,日后有需要的时候可以更换为动态的)

    该类同样是要继承自ActionSupport  

    设置一些必要的属性:

    InputPath (读取下载文件的目录)

    fileName (下载文件的文件名)

    InputStream inputstream (读取下载文件的输入流)

    ContentType (下载文件的类型)

    需要创建InputStream输入流

    public InputStream getInputStream()throws FileNotFoundException {

    String path=ServletActionContext.getServletContext().getRealPath(inputPath);

    return new BufferedInputStream(new FileInputStream(path+"\"+fileName));

    }

     

    省略getset方法...

    文件下载主要就是在struts.xml文件中的配置信息

     

    <action name="down" class="cn.wz.upload.action.DownAction" >

    <param name="inputPath">/upload</param>

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

    <param name="contentType">application/msword</param>

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

    <param name="contentDisposition">

    attachment;filename="${fileName}"

    </param>

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

    </result>

    </action>

    在配置文件中,ContentType参数决定了下载问阿金的类型。不同的文件类型对应的参数值也是不同的。

    ContentType对应的文件类型

    文档类型>>>ContentType设置

    Word>>>Application/msword

    Excel>>>Application/vnd.ms-excel

    PPT>>>Application/vnd.ms-powerpoint

    图片>>>image/gifimage/bmpimage/jpeg

    文本文件>>>text/plain

    HTML网页>>>text/html

    可执行文件>>>application/octet-stream

  • 相关阅读:
    ARC071F Infinite Sequence
    AGC043C Giant Graph
    ARC006E Addition and Subtraction Hard
    Codechef BALNET Balancing Network Revisited
    Gym102055H Game on the Tree
    Luogu P5320 [BJOI2019]勘破神机
    cookie和session
    jsp介绍
    request请求转换成对象。
    域对象 request
  • 原文地址:https://www.cnblogs.com/john69-/p/5846235.html
Copyright © 2020-2023  润新知