Struts 2实现文件的上传下载(解除文件大小限制)

Struts 2实现文件的上传下载

上传:这里写图片描述
下载:这里写图片描述

环境

MyEclipse 2014
Tomcat:apache-tomcat-8.0.46
JDK:1.7
Sturts版本:2.1
这里写图片描述

上传文件

1.上传文件界面index.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <s:form action="myupload" method="post" enctype="multipart/form-data">
        <s:file name="upload" label="上传的文件"></s:file>
        <s:submit value="上传"></s:submit>
    </s:form>
</body>
</html>

显示界面success.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
    <title>成功页面</title>
</head>
<body>
    恭喜你!上传成功!你上传的图片如下:<br/>
    <a href="uploadfile/<s:property value="uploadFileName"/>"><img src=uploadfile/<s:property value="uploadFileName"/>></a>
</body>
</html>

2.文件上传功能UploadAction.java

package org.action;

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

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
    private File upload;                            //上传文件
    //属性upload的get/set方法
    public File getUpload() {
        return upload;
    }
    public void setUpload(File upload) {
        this.upload = upload;
    }


    private String uploadFileName;                      //上传的文件名
    //属性uploadFileName的get/set方法
    public String getUploadFileName() {
        return uploadFileName;
    }
    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String execute() throws Exception {
        InputStream is=new FileInputStream(getUpload());    //根据上传的文件得到输入流

        String directory = "/uploadfile";

        String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);

        OutputStream os=new FileOutputStream(targetDirectory + "/" +uploadFileName);  //指定输出流地址

        byte buffer[]=new byte[1024];   
        int count=0;
        while((count=is.read(buffer))>0){
            os.write(buffer,0,count);                   //把文件写到指定位置的文件中
        }
        os.close();                                 //关闭
        is.close();
        return SUCCESS;                             //返回
    }
}

3.在struts.xml中配置action

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

    <package name="default" extends="struts-default">
        <action name="myupload" class="org.action.UploadAction">
            <result name="success">/success.jsp</result>
        </action>

    </package>
</struts>    

这时候访问http://localhost:8080/Ex5.3/index.jsp已经可以上传比较小的文件(<2M),但是一旦上传较大的文件就会报错
要修改文件大小限制,可以在Struts 2的配置文件struts.properties中修改struts.multipart.maxSize常量值,但是我们去找这个文件还是比较麻烦的,所以选择在struts.xml文件中加入下面这一行代码。

<constant name="struts.multipart.maxSize" value="1073741824" />

后面的数字可以根据自己的需要修改

下载文件

1.把文件复制到开发目录
这里写图片描述

2.下载界面download.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
    <title>文件下载</title>
</head>
<body>
    <a href="downloadAction.action">下载链接</a>
</body>
</html>

3.DownloadAction.java

package org.action;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{
    private String downloadFile;    //需要下载的文件路径
    public String getDownloadFile() {
        return downloadFile;
    }
    public void setDownloadFile(String downloadFile) {
        this.downloadFile = downloadFile;
    }
    public InputStream getTargetFile(){     //根据上面给出的文件路径,生成它的输入流
        return ServletActionContext.getServletContext().getResourceAsStream(downloadFile);
    }

    public String execute() throws Exception{
        return SUCCESS;
    }
}

4.在struts.xml配置action

        <action name="downloadAction" class="org.action.DownloadAction">
            <!-- 传递参数,指定要下载的文件的路径 -->
            <param name="downloadFile">/downloadfile/实验5.docx</param>
            <result name="success" type="stream">
                <!--  输入流名称,对应Action类中的getTargetFile()方法 -->
                <param name="inputName">targetFile</param>
                <!--  设置下载文件的文件名 -->
                <param name="contentDisposition">filename="example.docx"</param>
                <!-- 指定下载文件时缓冲区的大小 -->
                <param name="bufferSize">4096</param>
            </result>
        </action>

访问http://localhost:8080/Ex5.3/download.jsp就可以点击链接下载文件了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值