博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA Web 之 struts2文件上传下载演示(一)(转)
阅读量:6123 次
发布时间:2019-06-21

本文共 4288 字,大约阅读时间需要 14 分钟。

JAVA Web 之 struts2文件上传下载演示(一)

 

一、文件上传演示

 

 

 

1.需要的jar包

 

    大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/lib目录下面即可,需要的jar包如下图所示,其中的javax.servlet.jar是额外添加的,我到网上随便搜了一个下载地址,当然附件里面也有

 

 

 

 

2.配置web.xml

 

    配置WebContent/WEB-INF/web.xml中的内容,如果你的项目已经配置好了struts,这步可以跳过.

Xml代码:

 

1 
2
3
UpDownDemo
4 5
6
7
struts2
8
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
9
10
11
12
struts2
13
/*
14
15 16
17
index.jsp
18
19

 

3.Web界面

    其中有一点是特别需要注意的:定义form的时候,一定要添加enctype="multipart/form-data",并且一定要设置method="post"。

示例<form action="upload" enctype="multipart/form-data" method="post">

Html代码:

 

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 文件上传演示 8 9 10
11
12 请选择文件
13
14
15
16
17
18 19

 

4.后台JAVA代码

    代码中有解析

java代码:

 

1 package action; 2  3 import java.io.File; 4 import java.io.IOException; 5 import java.io.Serializable; 6  7 import org.apache.commons.io.FileUtils; 8 import org.apache.struts2.ServletActionContext; 9 10 import util.Encrypter;11 12 import com.opensymphony.xwork2.ActionSupport;13 14 /**15  * @author Kingt.W16  */17 @SuppressWarnings("serial")18 public class FileAction extends ActionSupport implements Serializable {19     /*20      * 这里定义的变量,一定要跟网页的中的name属性的值一致.21      * 如果网页中定义的是,那么在这里就要定义File img;22      */23     private File file;24     /*25      * 这里定义的fileFileName一定要是xxxFileName的形式,否则无法取到文件的文件名.26      * 其中xxx必须与上面定义的File类型的变量一致,如果上面定义的是File img,那么这里就27      * 定义为String imgFileName28      */29     private String fileFileName;30     /*31      * 这里定义的是文件的类型,如果不需要获取文件类型的话,可以不定义.32      *  命名规则跟xxxFileName类似,这里一定要定义成xxxContentType形式.33      */34     private String fileContentType;35     /*36      * 这这个变量是重命名后的文件名37      */38     private String newFileName;39     40     //getters and setters我省略了,没有复制上来41 42     public String upload() {43         System.out.println("文件名:" + fileFileName);44         System.out.println("文件类型:" + fileContentType);45         46         if (file != null) {47             //文件的保存路径是WebContent/file目录下48             String realpath = ServletActionContext.getServletContext()49                     .getRealPath("/file");50             System.out.println("文件的保存路径:" + realpath);51             52             //文件的后缀53             String suffix = fileFileName.substring(fileFileName54                     .lastIndexOf("."));55             if (fileFileName.lastIndexOf(".") == -1) {56                 return INPUT;57             }58             59             //上传以后,会重命名文件的名称,将其命名为全部是数字的文件名,防止可能出现的乱码.60             //当然, 只是为了防止出现乱码,一般不会出现乱码61             newFileName = Encrypter.randFileName() + suffix; 62             63             File savefile = new File(new File(realpath), newFileName);64             //如果保存的路径不存在,则新建65             if (!savefile.getParentFile().exists())66                 savefile.getParentFile().mkdirs();67 68             try {69                 //复制文件70                 FileUtils.copyFile(file, savefile);71                 System.out.println("文件上传成功");72             } catch (IOException e) {73                 e.printStackTrace();74                 System.out.println("文件上传失败");75                 return INPUT;76             }77         }78         79         return SUCCESS;80     }81 }

 

5.配置struts.xml

xml代码:

 

1 
2 3
4
5
6
download.jsp
7
download.jsp
8
9
10

 

6.小注

    至此,文件上传的功能就实现了。

 

    <1>文件下载演示,请查看另一篇博客

 

 

    <2>由于我是在J2EE Eclipse下建的项目,所以如果大家把附件下载以后,导入J2EE Eclipse是可以直接运行的,导入其他的IDE应该是没法直接运行,但是可以先新建好项目以后,把我的项目中的文件放到对应的目录下面即可

 

    <3>效果图如下

    选择文件,然后点击【确认上传】

 

    上传文件的内容如下图所示

 

然后就可以在 eclipse工作空间\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpDownDemo\file下面找到刚刚上传的文件了。

打开文件,发现两个记事本中的内容一样(在java代码中我有解释为啥会把文件重命名)

  •  (3.2 MB)
  • 下载次数: 132
 

 

 

 

转载于:https://www.cnblogs.com/xingmeng/p/3289316.html

你可能感兴趣的文章
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
Debian 6.05安装后乱码
查看>>
欢迎大家观看本人录制的51CTO精彩视频课程!
查看>>
IntelliJ IDEA中设置忽略@param注释中的参数与方法中的参数列表不一致的检查
查看>>
关于软件开发的一些感悟
查看>>
uva 10806
查看>>
纯CSS3绘制的黑色图标按钮组合
查看>>
Linux中环境变量文件及配置
查看>>
从0开始学Flutter
查看>>
mysql操作入门基础之对数据库和表的增删改查
查看>>
IIS负载均衡
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>