java struts 文件下载_struts2的文件上传和文件下载

本文详细介绍了如何使用Struts2框架实现文件上传和下载功能。重点包括:配置过滤器、创建上传页面、编写Action处理、限制文件大小和类型、以及文件下载的两种方式。此外,还提到了配置文件中的关键配置项和处理文件名编码问题。通过实例展示了上传不同文件类型的演示效果,并提供了相关配置和代码示例。
摘要由CSDN通过智能技术生成

实现使用Struts2文件上传和文件下载:

注意点:

(1)对应表单的file1和私有成员变量的名称必须一致

private File file1;

(2)限制上传文件大小和类型的格式是定死的,最好记住,记不住知道去哪里查;虽然不做要求,完全懂框架内部的机制,但是找一些东西还是需要能找到的,这样你可以很好的实现一些功能,因为这些关键字都是框架底层定义好的,图一是找到配置上传文件大小的关键字,图二是找到设置文件类型的关键字。

b900ffa6ffb519c37eb852f03703a70d.png

111f9aa2b23ee05925e20fed899fd15c.png

1:第一步,引入核心包,省略;

2:在web.xml配置过滤器,如下所示:

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 struts2_upload20170306

4

5 index.html

6 index.htm

7 index.jsp

8 default.html

9 default.htm

10 default.jsp

11

12

13

14

15

16

17

18 struts2

19

20 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

21

22

23

24 struts2

25

26 /*27 28

29

3:创建上传文件的页面uploadfile.jsp,源码如下所示:

需要注意form标签需要引入这句:enctype="multipart/form-data"

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

上传文件的页面

8

9

10

11

12 文件名:

13 文件:

14

15

16

17

4:开发action,实现对文件上传后台的处理:已经加了详细的注释,需要注意的地方都加了注释;

1 packagecom.bie.upload;2

3 importjava.io.File;4

5 importorg.apache.commons.io.FileUtils;6 importorg.apache.struts2.ServletActionContext;7

8 importcom.opensymphony.xwork2.ActionSupport;9

10 /**

11 *@authorBieHongLi12 *@version创建时间:2017年3月6日 上午10:43:5213 * 上传文件的Action处理14 *15 * struts2文件上传16 * 1:struts2中文件上传拦截器帮助我们完成上传文件的功能;17 *18 *19 */

20 public class UploadAction extendsActionSupport{21

22 private static final long serialVersionUID = 1L;23 //对应表单的file1

24 privateFile file1;25 //当前上传的文件名

26 privateString file1FileName;27 //文件类型(MIME)

28 privateString file1ContentType;29 public voidsetFile1(File file1) {30 this.file1 =file1;31 }32 public voidsetFile1FileName(String file1FileName) {33 this.file1FileName =file1FileName;34 }35 public voidsetFile1ContentType(String file1ContentType) {36 this.file1ContentType =file1ContentType;37 }38

39

40 @Override41 public String execute() throwsException {42 //开始拿到上传的文件,进行处理,上传之前,要创建一个upload目录

43 System.out.println("测试上传的文件");44 //把文件上传到upload目录,获取上传的目录路径

45 String path=ServletActionContext.getServletContext().getRealPath("/upload");46 //创建目标文件对象,文件名file1FileName,格式_FileName

47 File destFile=newFile(path,file1FileName);48 //把上传的文件,拷贝到目标文件中

49 FileUtils.copyFile(file1, destFile);50

51 returnSUCCESS;52 }53

54

55 }

5:由于练习阶段,需要很多测试,所以为了方便,特别引入了全局配置,总配置文件和各个项目的配置文件,下面是源码:

在全局配置文件中实现限制上传文件的大小,在分配置文件中实现限制上传文件的类型;

1 <?xml version="1.0" encoding="UTF-8" ?>

2 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

4 "http://struts.apache.org/dtds/struts-2.0.dtd">

5

6

7

8

9

10

11

12 /uploadfile/success.jsp

13

14

15

16

17 txt,jpg,gif,png

18

19

20

21

23 /uploadfile/error.jsp

24

25

26

27

1 <?xml version="1.0" encoding="UTF-8" ?>

2 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

4 "http://struts.apache.org/dtds/struts-2.0.dtd">

5

6

7

8

9

10

11

12

13

1 <?xml version="1.0" encoding="UTF-8" ?>

2 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

4 "http://struts.apache.org/dtds/struts-2.0.dtd">

5

6

7

8

9

10

11

12

13

14

15

6:最后完成成功页面和错误页面的跳转,源码如下所示:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

成功的页面

8

9

10 成功的页面11

12

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

成功的页面

8

9

10 error.jsp11

12

13

14

15

演示效果如下所示:分别演示了限制不符合文件类型的上传和符合文件类型的上传

05efd24fefcd335ded77f9631e790250.png

struts2实现文件的下载是在上面上传的基础上完成的,所以直接写下载的代码:

1:实现文件的下载,首先创建一个list.jsp页面,用于展示文件,源码如下所示:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

8

下载的页面

9

10

11

12

13

14

15

编号

16

文件名

17

操作

18

19

20

21

${fn.count}

22

${fileName }

23

24

25

26

27

28 下载

29

30

31

32

33

34

35

36

2:然后开发Action,创建一个文件DownActin.java,源码如下所示:

1 packagecom.bie.upload;2

3 importjava.io.File;4 importjava.io.InputStream;5 importjava.io.UnsupportedEncodingException;6 importjava.net.URLEncoder;7 importjava.util.Map;8

9 importorg.apache.struts2.ServletActionContext;10

11 importcom.opensymphony.xwork2.ActionContext;12 importcom.opensymphony.xwork2.ActionSupport;13

14 /**

15 *@authorBieHongLi16 *@version创建时间:2017年3月6日 下午1:54:0017 * 文件下载的2种方式:18 * 方式1:通过response对象向浏览器写入字节流数据,设置下载的响应头19 * 方式2:struts的方式20 */

21 public class DownAction extendsActionSupport{22

23

24 private static final long serialVersionUID = 1L;25

26 //第一步:显示所有要下载的文件的列表

27 public String list() throwsException {28 //1:得到upload目录路径

29 String path=ServletActionContext.getServletContext().getRealPath("/upload");30 //2:目录对象

31 File file=newFile(path);32 //3:得到所有要下载的文件的文件名

33 String[] fileNames=file.list();34 //4:保存

35 ActionContext ac=ActionContext.getContext();36 //5:得到代表request的Map(第二种方式)

37 Map request=(Map)ac.get("request");38

39 request.put("fileNames", fileNames);40 return "list";41 }42

43 //*************2:文件下载************************/44 //2.1:获取要下载的文件的文件名,设置字符集,前台页面提交的是以get方式提交的

45 privateString fileName;46 public voidsetFileName(String fileName) {47 //处理传入的参数种问题(get提交)

48 try{49 fileName=new String(fileName.getBytes("ISO8859-1"),"UTF-8");50 } catch(UnsupportedEncodingException e) {51 throw newRuntimeException();52 }53 //把处理好的文件名,赋值

54 this.fileName =fileName;55 }56

57 //2.2:下载提交的业务方法(在struts.xml中配置返回stream)

58 public String down() throwsException {59 return "download";60 }61

62 //2.3:返回流的方法

63 publicInputStream getAttrInputStream(){64 return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName);65 }66

67 //2.4:下载显示的中文名,(浏览器显示的文件名)

68 publicString getDownFileName(){69 try{70 //import java.net.URLEncoder;

71 fileName = URLEncoder.encode(fileName,"UTF-8");72 }catch(Exception e){73 throw newRuntimeException();74 }75

76 returnfileName;77 }78 }

3:接着配置struts.xml的分文件fileupload.xml,配置如下所示:

1 <?xml version="1.0" encoding="UTF-8" ?>

2 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

4 "http://struts.apache.org/dtds/struts-2.0.dtd">

5

6

7

8

9

10

11

12 /uploadfile/success.jsp

13

14

15

16

18 txt,jpg,gif,png

19

20

21

22

24 /uploadfile/error.jsp

25

26

27

28

29

30

31 /uploadfile/list.jsp

32

33

34

35

36 application/octet-stream

37

38 attrInputStream

39

40 attachment;filename="${downFileName}"

41

42 1024

43

44

45

46

47

演示效果如下图所示:

7d4932e957de542f0c64020b92dfd358.png

下面简单说一下如何找一些配置或者定义好的文件名:

对于框架的要求,不需要研究底层,当然你有精力,可以去研究,对于一个又一个新的框架的产生,我感觉个人能熟练应用和知道底层是如何工作的以及底层的定义名词,这就足够了。

1:首先应该会找到struts-default.xml这个文件,以及配置文件里面的一些配置,如这次使用下载文件所使用的stream流api里面的案例:

2dfd61cd9558a7ea19654d2beaf650d3.png

2:这次上传文件所使用的过滤器,你也应该能找到,这样才可以会用他们定义好的属性:

1b702baf68acaf9c7e8db4c55621a889.png

革命尚未成功,别先生仍需努力啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值