struts2实现文件上传下载功能

struts2实现文件的上传下载,一些关键代码我都有解释,这里只实现,没有对功能做进一步升级。

使用到的工具:

IDE:IDEA
javaIDK 1.8
构建工具:gradle
服务器:tomcat9

此次内容使用到的基本环境自己去配,代码部分,不论你用任何工具,或者技术,都是殊途同归的,下面直接上代码:

需要注意的是,在这个demo里,我使用的Lombok插件,作用是,用注解代替了setter,getter方法,具体用法我就不细说了,配置比较简单,给大家一个:参考
可能会因为构建工具的不同在设置方面有些不同,自行百度解决,解决不了的留言

单文件上传:

fileUpload.jsp:

// 单文件上传的jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
    <!--<s:fielderror/>-->
    <form action="fileUpload" method="post" enctype="multipart/form-data">
        <s:textfield name="fileName" label="文件名"/>
        <s:file name="doc" label="上传文件"/>
        <s:submit label="提交"/>
    </form>
</body>
</html>

fileUploadAction:

///单文件上传的action
package Action;
import com.opensymphony.xwork2.ActionSupport;
import lombok.Getter;
import lombok.Setter;
import java.io.*;
public class fileUploadAction extends ActionSupport {
    @Getter@Setter
    private File doc;
    @Setter@Getter
    private String fileName;
    @Getter@Setter
    private String docFileName;
    @Getter@Setter
    private String docContentType;
    public String execute()throws Exception{
        System.out.println("用户传入的文件名为:"+fileName);
        System.out.println("上传文件的真实文件名为:"+docFileName);
        System.out.println("文件Type为:"+docContentType);
        System.out.println("传入后的临时文件名:"+doc.getName());
        OutputStream output = null;
        InputStream input = null;
        try{
            //把上传过来的文件存放到e盘temp目录下,没有则创建,以真实的文件名作为名字
            output = new FileOutputStream("e:/temp/"+docFileName);
            //建立一个10k缓冲区
            byte [] bs = new byte[10240];
            //将上传过来的文件输出到output中
            input = new FileInputStream(doc);
            int length = 0;
            //length=input.read(bs)这句话中,length=-1代表读到文件结尾
            while ((length=input.read(bs))>0){
                output.write(bs, 0,length);
            }
        }finally {
            input.close();
            output.close();
        }
        return SUCCESS;
    }
}

struts.xml:

//这里只给出action部分,剩下的地方大家都会
 <action name="fileUpload" class="Action.fileUploadAction">
            <result name="success ">/uploadSuccess.jsp</result>
            <result name="input">/index.jsp</result>
        </action>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name>jee2019</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

到这里单文件的上传功能已经实现了,下面上下载的代码:
fileDownload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="fileDownloadAction.action">下载文件</a>
</body>
</html>

fileDownloadAction

package Action;

import com.opensymphony.xwork2.ActionSupport;

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

public class fileDownloadAction extends ActionSupport {
    public InputStream getInputStream()throws Exception{
        File file = new File("e:/temp/test.txt");
        return new FileInputStream(file);

    }
}

struts.xml,这里需要注意下,param已经指定了下载内容:

<action name="fileDownloadAction" class="Action.fileDownloadAction">
            <result type="stream">
                <param name="contentDisposition">attachment;filename="test.txt"</param>
            </result>
        </action>

web.xml与之前的一样

到这里我们已经实现了单文件的上传和下载,至于多文件的上传,大同小异,只不过利用了list或者Array,大家自行研究,有疑问或者要源码的话,留言就好!由于刚开始写博客,不足之处,欢迎批评指正,后期代码会同步到码云上,方便大家参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵小哥要冲啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值