Struts2 多文件上传和文件下载

第四节:多文件上传

第五节:Struts2 文件下载

返回的是文件流
<param name="contentDisposition">attachment;filename=${fileName}</param>
InputStream getInputStream()

项目结构:

多个文件上传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 ActionSupport{
    private static final long serialVersionUID = 1L;
    
    private File[] struts;                    //文件,对应fileupload.jsp中input type=file的name
    private String[] strutsFileName;        //文件名
    private String[] strutsContentType;        //文件类型
    
    public File[] getStruts() {
        return struts;
    }

    public void setStruts(File[] struts) {
        this.struts = struts;
    }

    public String[] getStrutsFileName() {
        return strutsFileName;
    }

    public void setStrutsFileName(String[] strutsFileName) {
        this.strutsFileName = strutsFileName;
    }

    public String[] getStrutsContentType() {
        return strutsContentType;
    }

    public void setStrutsContentType(String[] strutsContentType) {
        this.strutsContentType = strutsContentType;
    }

    @Override
    public String execute() throws Exception {
        for(int i=0; i<struts.length; i++){
            System.out.println("文件名:" + strutsFileName[i]);
            System.out.println("文件类型:" + strutsContentType[i]);
            String filePath = "E:/" + strutsFileName[i];
            File savefile = new File(filePath);
            FileUtils.copyFile(struts[i], savefile);
        }
        return SUCCESS;
    }
    
    
}

文件下载action

FileDownloadAction.java:

package com.cy.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import com.opensymphony.xwork2.ActionSupport;

public class FileDownloadAction extends ActionSupport{

    private static final long serialVersionUID = 1L;
    private String fileName;        //下载的文件名
    
    public String getFileName() throws Exception {
        fileName=new String(fileName.getBytes(),"ISO8859-1");    //对文件中文名进行重编码
        return fileName;
    }
    public void setFileName(String fileName){
        this.fileName = fileName;
    }
    
    /**
     * 返回的是文件流
     * @return
     * @throws Exception
     */
    public InputStream getInputStream() throws Exception{
        File file = new File("C:/1.jpg");    //将C盘下的1.png下载下来
        this.fileName = "美女1号.png";        //重新定义文件名
        return new FileInputStream(file);    //返回inputStream
    }
}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    
    <!-- 配置允许上传文件最大为20000000Byte,约20Mb -->
    <constant name="struts.multipart.maxSize" value="20000000"></constant>
    
    <package name="manage" extends="struts-default">
        <action name="upload" class="com.cy.action.FileUploadAction">
            <result name="input">fileupload.jsp</result>
            <result name="success">success.jsp</result>
            
            <!-- 配置允许上传的文件类型
                  配置允许上传的文件大小,最大81101byte,= 79.2KB
             -->
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg</param>
                <param name="maximumSize">81101</param>
            </interceptor-ref>
            
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>
        
        <action name="uploads" class="com.cy.action.FilesUploadAction">
            <result name="input">filesupload.jsp</result>
            <result name="success">success.jsp</result>
        </action>
        
        <action name="download" class="com.cy.action.FileDownloadAction">
            <result type="stream">
                <param name="contentDisposition">attachment;filename=${fileName}</param>
            </result>
        </action>
    </package>
    
</struts>

多个文件上传filesupload.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="uploads" method="post" enctype="multipart/form-data">
        选择文件1:<input type="file" name="struts" /><br/>
        选择文件2:<input type="file" name="struts" /><br/>
        选择文件3:<input type="file" name="struts" /><br/>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

文件上传成功success.jsp:

<body>
文件上传成功!
</body>

文件下载filedownload.jsp:

<body>
    <a href="download">文件下载</a>
</body>

测试结果:

1.多个文件上传:

文件上传成功之后,控制台会输出上传的文件名和文件类型

2.文件下载,将C盘下的1.jpg下载下来:

猜你喜欢

转载自blog.csdn.net/qq_40135955/article/details/89106866