首页 > 代码库 > Struts2实现文件的上传与动态下载功能。
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" > 文 件:< 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> //写到这里,文件上传这块儿就完成了。 由于篇幅问题,这个文件上传就写到这里吧。 |
Struts2实现文件的上传与动态下载功能。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。