Struts2实现文件的上传与动态下载功能。

本篇主要使用Struts2实现文件的上传与动态下载功能。出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串。用数据库存储真实文件名与随机文件名称之间的关联。

下面的是实体类

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class FileBag implements java.io.Serializable {

    // Fields

    private Integer id;   //Id编号

    private String filePath;  //文件存储路径(真实的文件被重命名后的名称)

    private Date fileIndate;  //文件上传日期

    private Integer downloadCount;  //文件下载次数

    private String fileMark;    //文件备注,说明

    private String fileSize;    //文件大小

    private String fileType;    //文件类型

    private String fileName;    //真实的文件名称

     

     //getter 和setter省略

}

然后写页面,页面其实很简单:

?


1

2

3

4

5

6

7

8

9

10

11

<form method="post" action="fileUploadAction.action" enctype="multipart/form-data">

    <div id="chooser">

    文&nbsp;&nbsp;&nbsp;&nbsp;件:<input id="file" type="file" name="file"/><br/>

    文件描述:<textarea id="fileremark" name="fileremark"></textarea><br/>   

    </div>

    

    <input type="submit" value="上传"/>

    </form>

然后写Action,前面提到过,出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串。用数据库存储真实文件名与随机文件名称之间的关联。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

package com.action;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Date;

import java.util.List;

import org.apache.struts2.ServletActionContext;

import org.springframework.beans.factory.annotation.Autowired;

import com.common.base.BaseAction;

import com.common.util.Configuration;

import com.common.util.FileExtensionHelper;

import com.common.util.StringUtils;

import com.entity.FileBag;

import com.opensymphony.xwork2.ModelDriven;

import com.service.FileBagService;

//该类支持多文件上传

public class FileUploadAction extends BaseAction {

    @Autowired

    private FileBagService fileBagService;

    

    private List<File> file;//Struts2文件上传不可缺少

    private List<String> fileFileName;//Struts2文件上传不可缺少

    private List<String> fileContentType;//Struts2文件上传不可缺少

    private List<String> fileremark;

    

    public List<File> getFile() {

        return file;

    }

    public void setFile(List<File> file) {

        this.file = file;

    }

    public List<String> getFileFileName() {

        return fileFileName;

    }

    public void setFileFileName(List<String> fileFileName) {

        this.fileFileName = fileFileName;

    }

    public List<String> getFileContentType() {

        return fileContentType;

    }

    public void setFileContentType(List<String> fileContentType) {

        this.fileContentType = fileContentType;

    }

    /**

     * 执行文件上传的操作,会自动生成一个带随机文件名的字符串来防止重复文件。

     */

    public String execute() throws Exception {

        for (int i = 0; i < file.size(); i++) {         

            FileBag fileBag = new FileBag();   //创建一个新的实例存储文件信息

            fileBag.setFileIndate(new Date());  //设定文件上传日期

            fileBag.setFileMark(fileremark.get(i));   //设定文件的备注信息

            fileBag.setFileName(fileFileName.get(i));  //设定文件的真实名称

            fileBag.setDownloadCount(0);   //设定文件下载次数为0

            fileBag.setFileSize(file.get(i).length()+"");

            String fileRandomName = StringUtils.randomString(20);  //随机产生文件名称的字符串

            fileBag.setFilePath(fileRandomName);        //设定文件的随机名称

            fileBag.setFileType(this.fileContentType.get(i));  //设定文件类型

            InputStream in = new FileInputStream(file.get(i));

            //从Configuration类中获取设定的文件存储路径(常量),下载的时候也会用到这个存储地址

            String root = Configuration.getValue("fileSaveDir");

            File file = new File(root);

            if(!file.exists()){//如果目录不存在,则会重新创建目录

                file.mkdirs();

                System.out.println("重新创建目录!");

            }

            File destFile = new File(root, fileRandomName);

            OutputStream out = new FileOutputStream(destFile);

            byte[] b = new byte[1024];

            int length = 0;

            while ((length = in.read(b)) > 0) {

                out.write(b, 0, length);

            }

            in.close();

            out.close();

            fileBagService.save(fileBag);

        }

        this.msg=this.file.size()+"个文件上传成功!";

        return SUCCESS;

    }

    public List<String> getFileremark() {

        return fileremark;

    }

    public void setFileremark(List<String> fileremark) {

        this.fileremark = fileremark;

    }

}

设定Struts2的配置

?


1

2

struts.multipart.saveDir=D\:\\    设定临时文件存储位置

struts.multipart.maxSize=105591603200     //设置文件最大上传多少兆,这里单位是字节

Struts.xml中对Action的配置

?


1

2

3

4

5

6

7

<!-- 文件上传 -->

<action name="fileUploadAction" class="com.action.FileUploadAction">

  <result name="success">/file/fileupload.jsp</result>

  <result name="input">/file/fileupload.jsp</result>

</action>    //写到这里,文件上传这块儿就完成了。

               由于篇幅问题,这个文件上传就写到这里吧。

时间: 2024-08-07 04:33:03

Struts2实现文件的上传与动态下载功能。的相关文章

struts2实现文件的上传和下载

文件的上传和下载需要两个jar包  commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar JSP页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

struts2实现文件的上传下载实现

---恢复内容开始--- 了解 1 前台form 表单  method=post ,   enctype=multipart/form-data             Struts2在原有的上传解析器上做了进一步封装,更进一步简化了文件上传 2 struts2 默认使用的是Jakarta和  Common-FileUpload的文件上传框架,则需要在web应用上引入相应的jar包 Action 需要使用3个属性来封装文件域的信息 (1)类型为File 的  xx属性封装了该文件域对应的文件内容

基于struts2实现文件的上传和下载;

前台from表单: <form action="dd.action" method="post"enctype="multipart/form-data"> </form> 表单在提交数据的时候以二进制流的形势向服务器提交数据: struts2在原有的上传解析器继承上做了进一步封装,更近一步简化了文件上传; struts2默认使用的是Jakarta和Common-FileUpload的文件上传框架,因此,如果需要shiyo

【Struts2】文件的上传与上传权限的控制

很多关于Struts2的文章,对此都有详细的介绍,但是里面的示例的程序写得很糟糕.各种无意义的拦截器技术.国际化技术.初始化参数,把原本简单的程序弄得很繁琐.同时,部分关键的代码没有写.导致每次上传Tomcat都报Unable to find 'struts.multipart.saveDir' property setting.的警告.然后上传大点的文件,整个Web工程就崩溃,然后后台抛出大段的File Upload BaseSize Limit Exceeded Exception异常,刷爆

JSP如何实现文件断点上传和断点下载?

核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块的轮子,虽然程序员的天性曾迫使我重新造轮子.但是因为时间的关系还有工作的关系,我只能罢休了.最后我选择了百度的WebUploader来实现前端所需. 如何合,在合之前,我们还得先解决一个问题,我们如何区分分块所属那个文件的

Struts2控制文件的上传与下载

Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制数据发送给数据. (2)Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此,如果需要使用Struts2的文件上传功能,则需要在web应用中增加两个JAR文件,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar

struts2实现文件的上传和下载实例[转]

实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中.从而我们就能够以本地文件方式的操作浏览器上传的文件 具体实现: 一.创建index.jsp页面 1 <body> 2 <s:form action="upload" method="post" theme="

Struts2多文件的上传

Struts2Test.java源代码: package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; @Su