Struts2--文件上传与下载

1 文件上传
页面:

<body>
<!--        必须是post的方式 -->
        <form action="upload.action" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="file"/>
            <input type="submit" value="上传"/>
        </form>
  </body>

请求处理类:

public class UploadAction extends ActionSupport {

    //对应JSP页面中的name="file"
    private File file;
    //文件名,必须加
    private String fileFileName;
    //文件的类型,必须加
    private String fileContentType;

    private InputStream is;
    private OutputStream os;
    public String upload() throws IOException{
        HttpServletRequest request=ServletActionContext.getRequest();
        String path=request.getRealPath("/upload");//获取项目目录下的upload目录的路径
        try {
            is=new FileInputStream(file);
            os=new FileOutputStream(new File(path,fileFileName));//创建目录和创建文件
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        byte[] buffer=new byte[200];
        int len=0;
        while((len=is.read(buffer))!=-1){
            os.write(buffer, 0, len);
        }
        os.close();
        is.close();
        return Action.SUCCESS;
    }

    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
}
页面中的name属性设置的值与类中的属性名称一一对应。
request.getRealPath("/upload");//获取项目目录下的upload目录的路径,将上传的文件放在该upload中。

struts.xml配置:

<struts>
<!--    设置临时目录 -->
    <constant name="struts.multipart.saveDir" value="E:/Docum"></constant>
<!--    设置上传文件的最大大小必须大于等于maximumSize -->
    <constant name="struts.multipart.maxSize" value="20971520"></constant>

    <package name="default" extends="struts-default" namespace="/">
        <action name="upload" class="cn.sxt.action.UploadAction" method="upload">
            <result>/index.jsp</result>
            <!-- 拦截器 -->
            <interceptor-ref name="fileUpload">
                <!-- 设置文件最大值 -->
                <param name="maximumSize">20971520</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
        </action>
    </package>
</struts>

多个文件上传即为File数组。
页面:

<link rel="stylesheet" type="text/css" href="styles.css">
    <script type="text/javascript" src="js/jquery-3.0.0.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('#btn').click(function(){
                var field="<p><input type='file' name='file'/><input type='button' value='删除' onclick='removed(this);'/></p>"
                $('#files').append(field);
            });
        });
        function removed(o){

            $(o).parent().remove();
        }

    </script>
  </head>
  <body>
<!--        必须是post的方式 -->
        <form action="upload.action" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="file"/><input type="button" id="btn" value="添加">
            <div id="files"></div>
            <input type="submit" value="上传"/>
        </form>
  </body>

请求处理类:

package cn.sxt.action;

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 java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class BatchUploadAction {
    private File[] file;
    private String[] fileFileName;
    private String[] fileContentType;
    public String execute() throws IOException {
        HttpServletRequest request = ServletActionContext.getRequest();
        String path = request.getRealPath("/upload");
        for (int i = 0; i < file.length; i++) {
            InputStream is = new FileInputStream(file[i]);
            OutputStream os = new FileOutputStream(new File(path, fileFileName[i]));

            byte[] buffer = new byte[200];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            os.close();
            is.close();
        }
        return Action.SUCCESS;
    }
    public File[] getFile() {
        return file;
    }
    public void setFile(File[] file) {
        this.file = file;
    }

    public String[] getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String[] fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String[] getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String[] fileContentType) {
        this.fileContentType = fileContentType;
    }
}

struts.xml配置:

<action name="batch" class="cn.sxt.action.BatchUploadAction">
            <result>/index.jsp</result>
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">20971520</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
        </action>

2 文件的下载:
2.1 获取response,通过输入输出来下载文件。
请求处理器

public class DownloadAction {

    public String execute() throws IOException{
        HttpServletRequest req=ServletActionContext.getRequest();
        HttpServletResponse resp=ServletActionContext.getResponse();
        //获取路径
        String path=req.getRealPath("/download");
        File file=new File(path,"dema1.txt");
        resp.setContentLength((int)file.length());
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/octet-stream");
        resp.setHeader("Content-Disposition","attachment;filename='dema1.txt'");
        byte[] buffer=new byte[400];
        int len;
        InputStream is=new FileInputStream(file);
        OutputStream os=resp.getOutputStream();
        while((len=is.read(buffer))!=-1){
            os.write(buffer, 0, len);
        }
        os.close();
        is.close();
        return null;
    }
}

配置信息

<!--        当action处理的方法返回空是不用配置结果集 -->
        <action name="download" class="cn.sxt.action.DownloadAction">
        </action>

2.2 未知的方式。
请求处理类

public class StreamDownloadAction {
    private String fileName;
    public String execute(){
        return Action.SUCCESS;
    }
    public InputStream getInputStream() throws IOException{
        HttpServletRequest req=ServletActionContext.getRequest();
        //获取路径
        String path=req.getRealPath("/download");
        return new FileInputStream(new File(path,fileName));
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}

配置信息

<action name="streamDownload" class="cn.sxt.action.StreamDownloadAction">
            <result type="stream">
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">attachment;filename=${fileName}</param>
            </result>
        </action>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值