多文件上传下载

表结构设计

前端页面

java代码

多文件上传在平时工作经常遇到,有些需要有些附件进行上传,常用有两种方式一种是上传到服务器中进行储存,另外一种是储存在数据库blob类型字段中。工作推荐使用上传到服务器中进行储存。
下面是从我日常模块抽取出来的小模块进行分享。

create table t_versionManage
(
 fDiseq   number(18,0)      not null,
               --序号   主键
  FResName   VARCHAR2(200),
               --项目名称
  FDesc     VARCHAR2(2000),
                --说明
  FVersion  VARCHAR2(50),
               --版本号
 fName      VARCHAR2(50),
                  --acl_user.name  发布人姓名
  fUserName  VARCHAR2(50),
               --acl_user.username  发布人id
FDept   VARCHAR2(50),
                --发布人部门号
  FOpDt      DATE not null,
               --发布日期
 
  constraint CON_PK_versionManage primary key (fDiseq)   
);


CREATE SEQUENCE SEQ_VERSION INCREMENT BY 1 START WITH 1 MAXVALUE 10E16 MINVALUE 1 NOCYCLE NOCACHE ;
select d.*,rowid from t_versionmanage d
--附件表
CREATE TABLE t_File(
  fid  varchar2(50)  NOT NULL,
      --fk:t_File;.fid
  fSeq    Number(6,0)  ,
      --内部序号
  fName  varchar2(500)   null,
      --附件名称(文件名)
  fKbsize  Number(6,2)  ,
      --附件大小()
  furl    varchar2(500)  ,
      --附件内容
  fDiseq  number(18,0)      not null,
         --详细资料序号(外键)   ---t_versionManage.fDiseq
  fifvalid varchar2(2) default '1' not null,
  --是否有效
  constraint con_pk_tfile primary key( fid )
);

前端页面

   前端页面需要注意的是这form表单记得加上**enctype ="multipart/form-data"** method=“post”  这里我们前端框架用freeMark和bootstarp,现在我们来看添加附件功能前端页面
//这里是对文件上传框进行修改样式
<style type="text/css">
	.input-file{
    display: inline-block;
    position: relative;
    overflow: hidden;
    text-align: center;
    width: auto;
    background-color: #C0C0C0;
    border: solid 1px #ddd;
    border-radius: 4px;
    padding: 5px 10px;
    font-size: 12px;
    font-weight: normal;
    line-height: 18px;
    color:#fff;
    text-decoration: none;
}
.input-file input[type="file"] {
    position: absolute;
    top: 0;
    right: 0;
    font-size: 14px;
    background-color: #fff;
    transform: translate(-300px, 0px) scale(4);
    height: 40px;
    opacity: 0;
    filter: alpha(opacity=0);
 }
	</style>
//这里对上传多个文件显示在下面
<script>
        $(function(){
            $(".input-fileup").on("change","input[type='file']",function(){
            	removed();
            	var a=this.files;
            	
            	   var html="";
                    for(var i=0;i<a.length;i++){
                 
                   fileName=a[i].name;
                 
                    html+='<p id="delet"><span id="sv">'+fileName+'</span></p>';
                    }
                    $(".showFileName1").append(html);
                    html="";
    				//$(this).val("");
            })
           
        })
        function removed() {
					$(".showFileName1").empty();
				} 
        
    </script>

在这里插入图片描述
当然你们可以把文件上传框改为自己喜欢的样式


<div class="col-sm-3" style="width: 260px;" id="files" >
								<!-- 	<input type="file" name="file" multiple="multiple" size="10" /> -->
									<a class="input-file input-fileup" href="javascript:;">
                                                                      选择文件<input size="10" type="file" name="file" id="file"  multiple="multiple">
			                      </a> 
			                     <div class="fileerrorTip1"></div>
			
			                     <div class="showFileName1"></div>
<html>
	<#assign rt=JspTaglibs[ "/WEB-INF/kycore.tld"] />
	<#assign s=JspTaglibs[ "/WEB-INF/struts-tags.tld"]>

		<head>
			<title>行政版本系统管理</title>
			<meta charset="UTF-8">
			<#include "/includes/htmlHeadContent.ftl" />
			<script type="text/javascript">
				var flag = 0;

				
				function save(theForm) {
				
					if(flag > 0) {
						alertMsg.info("请不要重复提交!");
						return false;
					}
					//获取表格值
					var fResName = $("#fResName").val();
					var fVersion = $("#fVersion").val();
					var fOpDt = $("#fOpDt").val();

					if(!fResName) {
						alertMsg.info("项目名称不能为空!");
						return false;
					}
					if(!fVersion) {
						alertMsg.info("版本号不能为空!");
						return false;
					}

					if(!fOpDt) {
						alertMsg.info("发布时间不能为空!");
						return false;
					}

					if(fResName == null) {
						alertMsg.info("项目名称不能为空!");
						return false;
					}
					if(fVersion == null) {
						alertMsg.info("版本号不能为空!");
						return false;
					}

					if(fOpDt == null) {
						alertMsg.info("发布时间不能为空!");
						return false;
					}
					return iframeCallback(theForm, closeDialogConfirmCallback1);
				}

				function closeDialogConfirmCallback1(json) {
					
					if(json.statusCode == kyfuse.statusCode.error) {
						if(json.message && alertMsg)
							alertMsg.error(json.message);
					} else if(json.statusCode == kyfuse.statusCode.timeout) {
						if(alertMsg)
							alertMsg.error(json.message || kyfuse.msg("sessionTimout"), {
								okCall: kyfuse.loadLogin
							});
						else
							kyfuse.loadLogin();
					} else {
						writeBackData(json);
						try {
							var tabId = getCurrentTabId();
							if(tabId && tabId.length > 0) {
								parent.navTab.reloadFlag(tabId);
							} else {
								window.location.reload();
							}
						} catch(e) {

						}
						if(json.message && alertMsg) {
							alertMsg.confirm(json.message + "<br/><br/><b>是否关闭当前标签页?</b>", {
								okCall: function() {
									closeWindowPage();
									var url = 'querydz.action';
									window.location.href = url;
								}
							});
						}

					}
				}

				function getCurrentTabId() {
					var navTabId = "";
					var navTabs = parent
						.$("#navTab .tabsPageHeader .tabsPageHeaderContent .navTab-tab>li");
					var tabIndex = parent.navTab._currentIndex - 1;
					navTabs.each(function(i) {
						if(tabIndex == i) {
							navTabId = $(this).attr("tabid");
							return false;
						}
					});
					return navTabId;
				}

				function closeDialogNow() {
					$("#close").click();
				}

				$(function() {
					kyfuse.init();

				});

				//提交表单
				function doSubmit() {
					document.forms[0].submit();
				}
			</script>

			<script type="text/javascript">
			function reckon() {
				
				var fOpDt = $("#fOpDt").val();
				if(!fOpDt) {
					alertMsg.info("发布时间不能为空!");
					return false;
				}
				if(fOpDt == null) {
					alertMsg.info("发布时间为空,必填!");
					return false;
				}
				
			}
				$(function() {
					$('#btn')
						.click(
							function() {
								var field = "<p/><p><input  type='file' name='file'/><input  type='text' value='删除' οnclick='removed(this);'/></p>";
								$('#files').append(field);

							});
				});

				function removed(o) {
					$(o).parent().remove();
				}
				
				

					
			</script>
		
			
		</head>

		<body>
			<input type="hidden" id="reflashTabId" value="${reflashTabId?if_exists}">
			<div class="main-container" id="main-container">
				<div class="row" style="margin-right: 0px;">
					<div class="col-md-10 col-sm-10 col-xs-10 col-md-offset-1 col-sm-offset-1 col-xs-offset-1">
						<!-- PAGE CONTENT BEGINS -->
						<@s.form name="myform" namespace="/version" action="version_add.action" method="POST" cssClass="form-horizontal required-validate reg-page" id="validation-form" onsubmit="return save(this)" enctype ="multipart/form-data">

							<div class="space-5"></div>
							<div class="form-group">
								<label class="col-sm-2 control-label no-padding-right" for="form-field">项目名称:</label>
								<div class="col-sm-8">
									<input type="text" name="leaveVersion.fResName" id="fResName"  style="width: 100%;" />
									<font color="red">*(必填)</font>
								</div>
							</div>

							<div class="space-5"></div>
							<div class="form-group">

								<label class="col-sm-2 control-label no-padding-right" for="form-field-1">&nbsp;&nbsp;&nbsp;&nbsp;人:</label>
								<div class="col-sm-3" >
									<input type="text" name="leaveVersion.fName" readOnly="true" id="fName" style="width: 100%;" value="${leaveVersion.fName}" />
									<input type="hidden" name="leaveVersion.fUserName" readOnly="true" id="fUserName"  value="${leaveVersion.fUserName}" />
								</div>
								<label class="col-sm-2 control-label no-padding-right" for="form-field-1-1">&nbsp;&nbsp;&nbsp;&nbsp;门:</label>
								<div class="col-sm-3" >
									<input type="text" name="leaveVersion.fDept" id="fDept" readOnly="true" style="width: 100%;" value="${leaveVersion.fDept}" />
								</div>
							</div>

							<div class="space-5"></div>
							<div class="form-group">
								<label class="col-sm-2 control-label no-padding-right" for="form-field-1">&nbsp;&nbsp版本号:</label>
								<div class="col-sm-3" >
									<input type="text" name="leaveVersion.fVersion" id="fVersion" style="width: 100%;" />
									<font color="red">*(必填)</font>
								</div>
								<label class="col-sm-2 control-label no-padding-right" for="form-field-1-1">发布日期:</label>
								<div class="col-sm-3" ">
									<input class="input" type="date" name="leaveVersion.fOpDt" id="fOpDt" style="width: 100%;" value=${.now }  onmouseout="reckon()" />
								    <font color="red">*(必填)</font>
								</div>
							</div>
						
							<div class="space-5"></div>
							<div class="form-group">
								<label class="col-sm-2 control-label no-padding-right" for="form-field-1">版本说明:</label>
								<div class="col-sm-8">
									<textarea name="leaveVersion.fDesc" id="fDesc" cols="20" rows="5" style="width: 100%; height: 100px;" placeholder="请详细填写版本说明..."></textarea>
									
								</div>
							</div>
							<div class="space-5"></div>
							<div class="space-5"></div>
							<div class="form-group">
								<label class="col-sm-2 control-label no-padding-right" for="form-field-1" >&nbsp;&nbsp;文件:</label>
								<div class="col-sm-3" style="width: 260px;" id="files" >
								<!-- 	<input type="file" name="file" multiple="multiple" size="10" /> -->
									<a class="input-file input-fileup" href="javascript:;">
                                                                      选择文件<input size="10" type="file" name="file" id="file"  multiple="multiple">
			                      </a> 
			                     <div class="fileerrorTip1"></div>
			
			                     <div class="showFileName1"></div>


                    
                    
                         
                    
								</div>
								
								<!-- <label class="col-sm-2 control-label no-padding-right" for="form-field-1"><input type="button" id="btn"   class="btn btn-xs btn-warning  ace-icon fa fa-file-text-o bigger-120"
						value="添加" /></label> -->
							</div>

							<div class="clearfix form-actions">
								<label class="col-md-4 col-sm-4 col-xs-4control-label no-padding-right" for="form-field-1"> </label>
								<div class="col-md-6 col-sm-6 col-xs-6" style="color: red">
									<button class="btn  btn-success  btn-round" type="submit" id="gritter-center">
							<i class="ace-icon fa fa-check bigger-110"></i> 保存
						</button> &nbsp;&nbsp;&nbsp;&nbsp;
									<button class="btn btn-defalut btn-round clo" id="button1">
							<i class="ace-icon fa fa-times bigger-110"></i> 取消
						</button>
								</div>
							</div>
						</@s.form>
					</div>
				</div>
			</div>
		</body>
<script>
        $(function(){
            $(".input-fileup").on("change","input[type='file']",function(){
            	removed();
            	var a=this.files;
            	
            	   var html="";
                    for(var i=0;i<a.length;i++){
                 
                   fileName=a[i].name;
                 
                    html+='<p id="delet"><span id="sv">'+fileName+'</span></p>';
                    }
                    $(".showFileName1").append(html);
                    html="";
    				//$(this).val("");
            })
           
        })
        function removed() {
					$(".showFileName1").empty();
				} 
        
    </script>
<style type="text/css">
	.input-file{
    display: inline-block;
    position: relative;
    overflow: hidden;
    text-align: center;
    width: auto;
    background-color: #C0C0C0;
    border: solid 1px #ddd;
    border-radius: 4px;
    padding: 5px 10px;
    font-size: 12px;
    font-weight: normal;
    line-height: 18px;
    color:#fff;
    text-decoration: none;
}
.input-file input[type="file"] {
    position: absolute;
    top: 0;
    right: 0;
    font-size: 14px;
    background-color: #fff;
    transform: translate(-300px, 0px) scale(4);
    height: 40px;
    opacity: 0;
    filter: alpha(opacity=0);
 }
	</style>

</html>

上面这些是是对文件上传页面代码,下面我们看看下载页面代码,下载比较简单就是相当于传一个href 对其进行下载就行

<html>
	<#assign rt=JspTaglibs[ "/WEB-INF/kycore.tld"] />
	<#assign s=JspTaglibs[ "/WEB-INF/struts-tags.tld"]>

		<head>
			<#include "/includes/htmlHeadContent.ftl" />
			<script type="text/javascript" src="../js/showOrgTree.js"></script>
			<link rel="stylesheet" href="../ztree/css/zTreeStyle/zTreeStyle.css" type="text/css" />
			<script type="text/javascript" src="../ztree/js/jquery.ztree.core-3.5.js"></script>
			<script type="text/javascript" src="../ztree/js/jquery.ztree.excheck-3.5.js"></script>
			<script type="text/javascript" src="../js/ace-framework/additional-methods.js"></script>

			<meta charset="UTF-8">
			<title>项目版本明细管理</title>
			<script type="text/javascript">
				var flag = 0;

				// function tile(){alert("1111111");}
				function save(theForm) {

					if(flag > 0) {
						alertMsg.info("请不要重复提交!");
						return false;
					}
					//获取表格值
					var fResName = $("#fResName").val();
					var fVersion = $("#fVersion").val();
					var fOpDt = $("#fOpDt").val();

					if(!fResName) {
						alertMsg.info("项目名称不能为空!");
						return false;
					}
					if(!fVersion) {
						alertMsg.info("版本号不能为空!");
						return false;
					}

					if(!fOpDt) {
						alertMsg.info("发布时间不能为空!");
						return false;
					}

					if(fResName == null) {
						alertMsg.info("项目名称不能为空!");
						return false;
					}
					if(fVersion == null) {
						alertMsg.info("版本号不能为空!");
						return false;
					}

					if(fOpDt == null) {
						alertMsg.info("发布时间不能为空!");
						return false;
					}
					return iframeCallback(theForm, closeDialogConfirmCallback1);
				}

				function closeDialogConfirmCallback1(json) {
					if(json.statusCode == kyfuse.statusCode.error) {
						if(json.message && alertMsg)
							alertMsg.error(json.message);
					} else if(json.statusCode == kyfuse.statusCode.timeout) {
						if(alertMsg)
							alertMsg.error(json.message || kyfuse.msg("sessionTimout"), {
								okCall: kyfuse.loadLogin
							});
						else
							kyfuse.loadLogin();
					} else {
						writeBackData(json);
						try {
							var tabId = getCurrentTabId();
							if(tabId && tabId.length > 0) {
								parent.navTab.reloadFlag(tabId);
							} else {
								window.location.reload();
							}
						} catch(e) {

						}
						if(json.message && alertMsg) {
							alertMsg.confirm(json.message + "<br/><br/><b>是否关闭当前标签页?</b>", {
								okCall: function() {
									closeWindowPage();
									var url = 'querydz.action';
									window.location.href = url;
								}
							});
						}

					}
				}

				function getCurrentTabId() {
					var navTabId = "";
					var navTabs = parent
						.$("#navTab .tabsPageHeader .tabsPageHeaderContent .navTab-tab>li");
					var tabIndex = parent.navTab._currentIndex - 1;
					navTabs.each(function(i) {
						if(tabIndex == i) {
							navTabId = $(this).attr("tabid");
							return false;
						}
					});
					return navTabId;
				}

				function closeDialogNow() {
					$("#close").click();
				}

				$(function() {
					kyfuse.init();

				});

				//提交表单
				function doSubmit() {
					document.forms[0].submit();
				}
			</script>

			<script type="text/javascript">
			
			function reckon() {
				var fOpDt = $("#fOpDt").val();
				if(!fOpDt) {
					alertMsg.info("发布时间不能为空!");
					return false;
				}
				if(fOpDt == null) {
					alertMsg.info("发布时间为空,必填!");
					return false;
				}
				
			}
				$(function() {
					$('#btn')
						.click(
							function() {
								var field = "<p><input type='file' name='file'/><input type='button' value='删除' οnclick='delete();'/></p>";
								$('#files').append(field);

							});
				});

				function removed(o) {
					$(o).parent().remove();
				}

				$(function() {
					alert(fId);
					$("#deleteFile")
						.click(
							function(fId) {

								alertMsg
									.confirm(
										"确认要删除吗?",
										"删除文件",
										function(r) {
											if(r) {
												window.location = "version_deleteFile.action?leaveFile.fId=" +
													fId;
											}
										});
							});
				});
			</script>

		</head>

		<body>
			<input type="hidden" id="reflashTabId" value="${reflashTabId?if_exists}">
			<div class="main-container" id="main-container">
				<div class="page-content">
					<div class="row" style="margin-right: 0px;">
						<div class="col-md-10 col-sm-10 col-xs-10 col-md-offset-1 col-sm-offset-1 col-xs-offset-1">
							<!-- PAGE CONTENT BEGINS -->
							<@s.form name="myform" namespace="/version" action="version_edit.action" method="POST" cssClass="form-horizontal required-validate reg-page" id="validation-form" onsubmit="return save(this)"> <input class="input" type="hidden" name="leaveItem.dm" value="leaveItem.dm" /> <input type="hidden" name="leaveItem.id" id="name" value="${leaveItem.id}" readonly="readonly" style="width: 220px;" /> <input class="input" type="hidden" name="leaveItem.dept" value="${leaveItem.dept}" /> <input class="input" type="hidden" name="leaveItem.job" value="${leaveItem.job}" /> <input class="input" type="hidden" name="leaveItem.jobTitle" value="${leaveItem.jobTitle}" />

								<div class="space-5"></div>
								<div class="form-group">
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">项目名称:</label>
									<div class="col-sm-8">
										<input type="text" name="leaveVersion.fResName" id="fResName" value="${leaveVersion.fResName}" style="width: 100%;" />
										<font color="red">*(必填)</font>
									</div>
								</div>

								<div class="space-5"></div>
								<div class="form-group">

									<label class="col-sm-2 control-label no-padding-right" for="form-field-1-1">&nbsp;&nbsp;&nbsp;&nbsp;人:</label>
									<div class="col-sm-3" >
										<input type="text" name="leaveVersion.fName" readOnly="true" id="fName" style="width: 100%;" value="${leaveVersion.fName?if_exists}" /> <input type="hidden" name="leaveVersion.fUserName" readOnly="true" id="fUserName" style="width: 255px;" value="${leaveVersion.fUserName}" />
									</div>
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">&nbsp;&nbsp;&nbsp;&nbsp;门:</label>
									<div class="col-sm-3" >
										<input type="text" name="leaveVersion.fDept" id="fDept" readOnly="true" style="width: 100%;" value="${leaveVersion.fDept?if_exists}" />
									</div>
								</div>

								<div class="space-5"></div>
								<div class="form-group">
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">&nbsp;&nbsp版本号:</label>
									<div class="col-sm-3" >
										<input type="text" name="leaveVersion.fVersion" id="fVersion" value="${leaveVersion.fVersion?if_exists}" style="width: 100%;" />
										<font color="red">*(必填)</font>
									</div>
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">发布日期:</label>
									<div class="col-sm-3" >
										<input class="input" type="date" name="leaveVersion.fOpDt" value=${leaveVersion.fOpDt } id="fOpDt" style="width: 100%;" onmouseout="reckon()" />
									    <font color="red">*(必填)</font>
									</div>
								</div>

								<div class="space-5"></div>
								<div class="form-group">
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">版本说明:</label>
									<div class="col-sm-8">
										<textarea name="leaveVersion.fDesc" id="fDesc" cols="20" rows="5" style="width: 100%; height: 100px;">${leaveVersion.fDesc?if_exists}</textarea>
										
									</div>
								</div>
								<div class="space-5"></div>
								<div class="space-5"></div>
								<div class="form-group">
									<label class="col-sm-2 control-label no-padding-right" for="form-field-1">&nbsp;&nbsp;文件下载:</label>
									<div class="col-sm-3" style="width: 260px;" id="files">
										<#if fileList??>
											<#list fileList as fj>
												<a class="col-sm-0 control-label no-padding-right" style="margin-right: 12px;" id="file" name="file" href="version_downLoad.action?leaveFile.fId=${fj.FID?if_exists}" value="${fj.FID?if_exists}">${fj.FNAME?if_exists}</a>

												</p>
												</a>
											</#list>
										</#if>
									</div>

								</div>

								<div class="clearfix form-actions">
									<label class="col-md-3 col-sm-3 col-xs-3 control-label no-padding-right" for="form-field-1"> </label>
									<div class="col-md-6 col-sm-6 col-xs-6 col-md-offset-2"  >
										&nbsp;&nbsp;&nbsp;&nbsp;
										<button class="btn btn-default btn-round clo" id="button1">
								<i class="ace-icon fa fa-times bigger-110"></i> 关闭
							</button>
									</div>
								</div>

							</@s.form>
						</div>
					</div>
				</div>
			</div>
			<script type="text/javascript">
				$((function($) {
					$.datepicker.regional['zh-CN'] = {
						clearText: '清除',
						clearStatus: '清除已选日期',
						closeText: '关闭',
						closeStatus: '不改变当前选择',
						prevText: '<上月',
						prevStatus: '显示上月',
						prevBigText: '<<',
						prevBigStatus: '显示上一年',
						nextText: '下月>',
						nextStatus: '显示下月',
						nextBigText: '>>',
						nextBigStatus: '显示下一年',
						currentText: '今天',
						currentStatus: '显示本月',
						monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月',
							'九月', '十月', '十一月', '十二月'
						],
						monthNamesShort: ['一', '二', '三', '四', '五', '六', '七', '八',
							'九', '十', '十一', '十二'
						],
						monthStatus: '选择月份',
						yearStatus: '选择年份',
						weekHeader: '周',
						weekStatus: '年内周次',
						dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
						dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
						dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],
						dayStatus: '设置 DD 为一周起始',
						dateStatus: '选择 m月 d日, DD',
						dateFormat: 'yy-mm-dd',
						firstDay: 1,
						initStatus: '请选择日期',
						isRTL: false
					};
					$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
				})(jQuery));
				$('.datePicker').datepicker();
			</script>

		</body>

</html>

java代码方面
至于怎么配置struts还有spring,hibernate 之间配置我这里不详细讲了

action

package com.jlrdm.qj.action;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;

import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.ServletActionContext;

import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.bo.LeaveVersion;
import com.jlrdm.qj.bo.UploadInfo;
import com.jlrdm.qj.core.util.FileManageUtil;
import com.jlrdm.qj.service.LeaveFileService;
import com.jlrdm.qj.service.LeaveVersionService;
import com.ky.core.action.bean.JsonBean;
import com.ky.sys.action.SysMainAction;
import com.ky.sys.bo.User;
import com.ky.sys.bo.UserProperty;
import com.ky.sys.context.UserContext;
import com.ky.sys.exception.AclException;
import com.ky.sys.service.IUserService;
import com.ky.sys.shiro.SecurityUtils;

public class LeaveVersionAction extends SysMainAction {

	private LeaveVersion leaveVersion;
	private IUserService userService;
	private List<Map<String, Object>> listVersion;
	private LeaveVersionService leaveVersionService;
	private List<String> fileFileName;
	private List<File> file;
	private InputStream fileInput;
	private String fileContentType[];
	private String furl[];
	private LeaveFile leaveFile;
	private LeaveFileService leaveFileService;
	public FileManageUtil fileManageUtil;
	private List<Map<String, Object>> fileList;
	private String fileId;

	public String execute() throws Exception {

		return "SUCCESS";
	}

	public String query() {
		return "query";
	}

	/**
	 * 分页查询
	 * @return
	 */
	public String queryPage() {
		if (leaveVersion == null) {
			leaveVersion = new LeaveVersion();
		}

		listVersion = getList(leaveVersion);
		total = leaveVersionService.queryCount(leaveVersion);
		return "queryPage";
	}

	/***
	 * 方法描述:得到列表集合
	 * @param leaveVersion2 查询的参数
	 * @return List集合
	 */
	public List<Map<String, Object>> getList(LeaveVersion leaveVersion) {
		if (leaveVersion == null) {
			leaveVersion = new LeaveVersion();
		}
		List<Map<String, Object>> strVersion = leaveVersionService.queryPage(
				leaveVersion, getStartPos(), getPageSize());

		return strVersion;
	}

	/**
	  * 
	  * 方法描述:跳转到新增页面
	  * 
	  * @return
	  */
	public String addUI() {
		// 获取用户 部门
		User user = userService
				.findUserById(UserContext.getLoginUser().getId());
		List<Map<String, Object>> deptAndPost;
		if (leaveVersion == null) {
			leaveVersion = new LeaveVersion();
		}
		if (user != null && user.getId() != null && !"".equals(user.getId())) {
			deptAndPost = leaveVersionService
					.getDeptAndGWByUserId(user.getId());
			leaveVersion.setfUserName(user.getId());
			leaveVersion.setfName(user.getName());
			if (deptAndPost != null && deptAndPost.size() > 0) {
				leaveVersion.setfDept(deptAndPost.get(0).get("DEPTNAME")
						.toString());

			}

		}
		return "addUI";
	}

	/**
	 * 
	 * 方法描述:保存新增
	 * 
	 * @return
	 */
	public String add() throws IOException, ServletException {
		List<UploadInfo> fileInfos = null;
		Integer fdiseq = leaveVersionService.addVersion(leaveVersion);
		if (file != null && !file.isEmpty()) {
			try {

				fileInfos = FileManageUtil.FilesUpload(file, fileFileName,
						"/download/");
			} catch (Exception e) {
				jsonBean = new JsonBean("300", "上传失败!");
				System.out.println(e.getMessage());
			}
			if (fileInfos != null && !fileInfos.isEmpty()) {

				for (int i = 0; i < fileInfos.size(); i++) {
					LeaveFile leaveFile = new LeaveFile();
					leaveFile.setFifvalid("1");
					leaveFile.setFurl(fileInfos.get(i).getFilePath());
					leaveFile.setfName(fileInfos.get(i).getUploadFileName());
					leaveFile.setfDiseq(leaveVersion.getfDiseq());

					leaveFileService.addFile(leaveFile);
				}
				jsonBean = new JsonBean("200", "上传成功!");
			} else {

				jsonBean = new JsonBean("300", "上传失败!");
			}
		}
		jsonBean = new JsonBean("200", "保存成功!");
		return "SUCCESS";
	}

	/**
	 * 
	 * 方法描述:删除
	 * 先获取
	 * @return
	 */
	public String delete() {
		int fidesq=leaveVersion.getfDiseq();
		leaveVersionService.delete(leaveVersion.getfDiseq());
		fileList = leaveFileService.selectFile(fidesq);
		System.out.println(fileList.size());
		if(fileList.size()>0){
			leaveFileService.deleteFileByFdiseq(fidesq);
			
			for(int i=0;i<fileList.size();i++){
				FileManageUtil.delFile(fileList.get(i).get("FURL").toString());   
			    }
	        }
	       
		
		jsonBean = new JsonBean("200", "删除成功!");
		return "SUCCESS";

	}

	/**
	 * 方法描述:跳转到编辑页面
	 * @return
	 * 
	 */
	public String editUI() {
		if (leaveVersion != null
				&& StringUtils.isNotBlank(leaveVersion.getfDiseq() + "")) {
			User loginUser = (User) SecurityUtils.getSubject().getPrincipal();
			UserProperty userProperty = userService
					.findUserProByUserId(loginUser.getId());
			User user2 = new User();
			user2.setEnabled(true);
			leaveVersion = leaveVersionService.findObjectById(leaveVersion
					.getfDiseq());
			fileList = leaveFileService.selectFile(leaveVersion.getfDiseq());
		}
		return "editUI";
	}

	/**
	 * 方法描述:保存编辑
	 * @return
	 */
	public String edit() {

		try {
			if (leaveVersion != null) {
				leaveVersionService.update(leaveVersion);
				// 进入文件上传方法之前判断是否存在新增文件
				
				if(file!=null){
				editFileUplod();
				}
				
				
				jsonBean = new JsonBean("200", "保存成功!");
			} else {
				jsonBean = new JsonBean("300", "保存失败!");
			}

		} catch (AclException e) {
			jsonBean = new JsonBean("300", "保存失败!");
			e.printStackTrace();
		}
      
		return "SUCCESS";

	}

	/**
	 * 在编辑页面附件上传
	 * @return 
	 */
	public String editFileUplod() {

		// 上传
		List<UploadInfo> fileInfos = null;
		if (file.size() > 0  && file !=null) {
			try {

				fileInfos = FileManageUtil.FilesUpload(file, fileFileName,
						"/download/");
			} catch (Exception e) {
				jsonBean = new JsonBean("300", "上传失败!");
				System.out.println(e.getMessage());
			}
			if (fileInfos != null && !fileInfos.isEmpty()) {

				for (int i = 0; i < fileInfos.size(); i++) {
					LeaveFile leaveFile = new LeaveFile();
					leaveFile.setFifvalid("1");
					leaveFile.setFurl(fileInfos.get(i).getFilePath());
					leaveFile.setfName(fileInfos.get(i).getUploadFileName());
					leaveFile.setfDiseq(leaveVersion.getfDiseq());

					leaveFileService.addFile(leaveFile);
				}
				jsonBean = new JsonBean("200", "上传成功!");
			} else {

				jsonBean = new JsonBean("300", "上传失败!");
			}
		}
		return "SUCCESS";
	}

	/**
	 * 附件删除
	 * @param fileId 
	 */
	public String deleteFile() {
		
		if (!StringUtils.isEmpty(fileId)) {
			jsonBean = new JsonBean("300", "删除失败!");
			List<Map<String, Object>> fj = leaveFileService
					.findFileById(fileId);

			if (fj != null) {
				if (leaveFileService.deleteFileById(fileId)) {
					FileManageUtil.delFile(fj.get(0).get("FURL").toString());
					jsonBean = new JsonBean("200", "删除成功!");

				}

			}
		}
		return "SUCCESS";
	}

	/**
	 * 附件下载
	 */
	public String downLoad() throws Exception {

		if (leaveFile != null
				&& StringUtils.isNotBlank(leaveFile.getfId() + "")) {
			List<Map<String, Object>> fj = leaveFileService.findFileById(leaveFile.fId);

			FileManageUtil.doDownLoad(fj.get(0).get("FURL").toString(),
					fj.get(0).get("FNAME").toString(),
					ServletActionContext.getResponse());
		}
		return "SUCCESS";

	}

	/**
	 * 
	 * 方法描述:详情页面
	 * 
	 * @return
	 */
	public String detail() {
		if (leaveVersion != null
				&& StringUtils.isNotBlank(leaveVersion.getfDiseq() + "")) {
			User loginUser = (User) SecurityUtils.getSubject().getPrincipal();
			UserProperty userProperty = userService
					.findUserProByUserId(loginUser.getId());
			User user2 = new User();
			user2.setEnabled(true);

			leaveVersion = leaveVersionService.findObjectById(leaveVersion
					.getfDiseq());

			fileList = leaveFileService.selectFile(leaveVersion.getfDiseq());
			System.out.println("leaveVersion.toString()"
					+ leaveVersion.toString());

		}
		return "detail";

	}

/*
*这里对set和get方法省去
*/

}

LeaveFileService

package com.jlrdm.qj.service;

import java.util.List;
import java.util.Map;













import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.core.service.BaseService;

public interface LeaveFileService extends BaseService<LeaveFile>{
	/**
	 * 根据加附件
	 * @param 
	 * @return
	 */
	public void addFile(LeaveFile leaveFile);
    
	/**
	 * 根据fdiseq查询附件数据
	 * @param 
	 * @return
	 */
	public List<Map<String, Object>> selectFile(Integer integer);
	
	/**
	 * 根据查找附件
	 * @param 
	 * @return
	 */
	public List<Map<String, Object>> findFileById(String fId);
	/**
	 * 根据删除附件
	 * @param 
	 * @return
	 */
	public boolean deleteFileById(String fId);
	/**
	 * 根据fdiseq删除数据
	 * @param 
	 * @return
	 */
	public void deleteFileByFdiseq(int fidesq);
   

}

LeaveVersionService

package com.jlrdm.qj.service;

import java.util.List;
import java.util.Map;





import com.jlrdm.qj.bo.LeaveVersion;
import com.jlrdm.qj.core.service.BaseService;

public interface LeaveVersionService extends BaseService<LeaveVersion>{
    //分页查询
	List<Map<String, Object>> queryPage(LeaveVersion temp, int startPos,
			int pageSize);
    //统计
	int queryCount(LeaveVersion leaveVersion);
	/**
	 * 查询当前用户所属部门和岗位
	 * @param userId 用户编号
	 * @return
	 */

	List<Map<String, Object>> getDeptAndGWByUserId(String id);
	//返回主键
	public Integer addVersion(LeaveVersion leaveVersion);

}

LeaveFileServiceImpl

package com.jlrdm.qj.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.core.service.impl.BaseServiceImpl;
import com.jlrdm.qj.core.util.QueryHelper;
import com.jlrdm.qj.dao.LeaveFileDao;
import com.jlrdm.qj.service.LeaveFileService;

public class LeaveFileServiceImpl extends BaseServiceImpl<LeaveFile> implements
		LeaveFileService {
	private LeaveFileDao leaveFileDao;

	/**
	 * 查询新增附件
	 * @param userId 用户编号
	 * @return
	 */

	@Override
	public void addFile(LeaveFile leaveFile) {
		leaveFileDao.addFile(leaveFile);

	}

	/**
	 * 查询编辑页面附件
	 * @param 
	 * @return
	 */
	@Override
	public List<Map<String, Object>> selectFile(Integer fDiseq) {

		return leaveFileDao.selectFile(fDiseq);
	}

	/**
	 * 查询单个附件
	 * @param 
	 * @return
	 */

	public List<Map<String, Object>> findFileById(String fId) {
		return leaveFileDao.findFileById(fId);

	}

	/**
	 * 删除单个附件
	 * @param 
	 * @return
	 */
	public boolean deleteFileById(String fId) {
		return  leaveFileDao.deleteFileById(fId);
	}
	/**
	 * 删除单个附件
	 * @param 
	 * @return
	 */
	public void deleteFileByFdiseq(int fidesq) {
		leaveFileDao.deleteFileByFdiseq(fidesq);
		
	}
	
	public LeaveFileDao getLeaveFileDao() {
		return leaveFileDao;
	}

	public void setLeaveFileDao(LeaveFileDao leaveFileDao) {
		this.leaveFileDao = leaveFileDao;
	}

	

}

LeaveVersionServiceImpl

package com.jlrdm.qj.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.core.service.impl.BaseServiceImpl;
import com.jlrdm.qj.core.util.QueryHelper;
import com.jlrdm.qj.dao.LeaveFileDao;
import com.jlrdm.qj.service.LeaveFileService;

public class LeaveFileServiceImpl extends BaseServiceImpl<LeaveFile> implements
		LeaveFileService {
	private LeaveFileDao leaveFileDao;

	/**
	 * 查询新增附件
	 * @param userId 用户编号
	 * @return
	 */

	@Override
	public void addFile(LeaveFile leaveFile) {
		leaveFileDao.addFile(leaveFile);

	}

	/**
	 * 查询编辑页面附件
	 * @param 
	 * @return
	 */
	@Override
	public List<Map<String, Object>> selectFile(Integer fDiseq) {

		return leaveFileDao.selectFile(fDiseq);
	}

	/**
	 * 查询单个附件
	 * @param 
	 * @return
	 */

	public List<Map<String, Object>> findFileById(String fId) {
		return leaveFileDao.findFileById(fId);

	}

	/**
	 * 删除单个附件
	 * @param 
	 * @return
	 */
	public boolean deleteFileById(String fId) {
		return  leaveFileDao.deleteFileById(fId);
	}
	/**
	 * 删除单个附件
	 * @param 
	 * @return
	 */
	public void deleteFileByFdiseq(int fidesq) {
		leaveFileDao.deleteFileByFdiseq(fidesq);
		
	}
	
	public LeaveFileDao getLeaveFileDao() {
		return leaveFileDao;
	}

	public void setLeaveFileDao(LeaveFileDao leaveFileDao) {
		this.leaveFileDao = leaveFileDao;
	}

	

}

LeaveVersionDao

package com.jlrdm.qj.dao;

import java.util.List;
import java.util.Map;

import com.jlrdm.qj.bo.LeaveItem;
import com.jlrdm.qj.bo.LeaveVersion;
import com.jlrdm.qj.core.dao.BaseDao;

public interface LeaveVersionDao extends BaseDao<LeaveVersion>{

	List<Map<String, Object>> queryPage(LeaveVersion temp, int startPos,
			int pageSize);

	int queryPage(LeaveVersion leaveVersion);

	/**
	 * 查询当前用户所属部门和岗位
	 * @param userId 用户编号
	 * @return
	 */
	public List<Map<String, Object>> queryDeptAndGWByUserId(String userId);
     //插入数据并返回主键
	public Integer addVersion(LeaveVersion leaveVersion);
	

}

LeaveFileDaoImpl

package com.jlrdm.qj.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.jlrdm.qj.bo.LeaveDictionary;
import com.jlrdm.qj.bo.LeaveFile;
import com.jlrdm.qj.bo.LeaveVersion;
import com.jlrdm.qj.core.dao.impl.BaseDaoImpl;
import com.jlrdm.qj.core.util.QueryHelper;
import com.jlrdm.qj.dao.LeaveFileDao;
import com.jlrdm.qj.dao.LeaveVersionDao;

public class LeaveFileDaoImpl extends BaseDaoImpl<LeaveFile> implements LeaveFileDao {

	

	/**
	 * 查询新增附件
	 * @param userId 用户编号
	 * @return
	 */
 public	void addFile(LeaveFile leaveFile){
	 this.getHibernateTemplate().save(leaveFile);
	 
 }

 /**
	 * 查询查询编辑页面附件
	 * @param 
 * @return 
	 * @return
	 */

	public List<Map<String, Object>> selectFile(Integer fDiseq){
     String sql = "SELECT * FROM T_FILE WHERE FDISEQ ='"+fDiseq+"'";
    
	
     return findByNativeSQL(sql, null, null, 0, -1);
		
		
		
	}
	 /**
		 * 查询单个附件
		 * @param 
	 * @return 
		 * @return
		 */
	public List<Map<String, Object>> findFileById(String FID){
		String sql = "SELECT FID,FDISEQ,FNAME,FIFVALID,FKBSIZE,FURL FROM T_FILE WHERE FID ='"+FID+"'";

		
	     return   super.findByNativeSQL(sql, null, 0, -1);
		
	}

	 /**
		 * 删除单个附件
		 * @param 
	 * @return 
		 * @return
		 */
	public boolean deleteFileById(String fId){
		
		String sql = "delete from   LeaveFile WHERE fId ='"+fId+"'";
		
		this.delete(sql);
	   return  true;	
		
	}
	
	/**
	 * 根据fdiseq删除附件
	 * @param 
	 * @return
	 */
	public void deleteFileByFdiseq(int fdiseq){
		String sql = "delete from   LeaveFile WHERE fdiseq ='"+fdiseq+"'";
		this.delete(sql);
	}

}

LeaveVersionDaoImpl

package com.jlrdm.qj.dao.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.jlrdm.qj.bo.LeaveDictionary;
import com.jlrdm.qj.bo.LeaveVersion;
import com.jlrdm.qj.core.dao.impl.BaseDaoImpl;
import com.jlrdm.qj.core.util.QueryHelper;
import com.jlrdm.qj.dao.LeaveVersionDao;

public class LeaveVersionDaoImpl extends BaseDaoImpl implements LeaveVersionDao {

/**
 * 查询分页
 * @param 
 * @return
 */
@Override
public List<Map<String, Object>> queryPage(LeaveVersion leaveVersion, int startPos,int size) {
		StringBuffer strFrom = new StringBuffer();
strFrom.append("select * from t_versionManage where 1=1");

if (leaveVersion.getfName() != null) {
	strFrom.append(" and fname like'" +"%"+ leaveVersion.getfName() + "%'");
}
if (leaveVersion.getfResName() != null) {
	strFrom.append(" and fresname like'" +"%"+ leaveVersion.getfResName() + "%'");
}


strFrom.append(" order by fdiseq desc");

return super.findByNativeSQL(strFrom.toString(), null,startPos, size);
}
/**
 * 查询分页
 * @param 
 * @return
 */
@Override
public int queryPage(LeaveVersion leaveVersion) {
	StringBuffer strFrom = new StringBuffer();
	strFrom.append("select count(*) from t_versionManage where 1=1");

	if (leaveVersion.getfName() != null) {
		strFrom.append(" and fname like'" +"%"+ leaveVersion.getfName() + "%'");
	}
	if (leaveVersion.getfResName() != null) {
		strFrom.append(" and fresname like'" +"%"+ leaveVersion.getfResName() + "%'");
	}

	strFrom.append(" order by fdiseq desc");

		return super.findCountByNativeSQL(strFrom.toString());
}

/**
 * 查询当前用户所属部门和岗位
 * @param userId 用户编号
 * @return
 */
@Override
public List<Map<String, Object>> queryDeptAndGWByUserId(String userId) {
	String sql = "select (select mc from drsyb_res.kyres_sjdm where dmfl_id = '1'"
			+ " and dm = c.SHARE_DEPARTMENT) deptName,"
			+ " (select dm from drsyb_res.kyres_sjdm"
			+ " where dmfl_id = '1' and dm = c.SHARE_DEPARTMENT) deptId,"
			+ " (select mc from drsyb_res.kyres_sjdm"
			+ " where dmfl_id = 'GW' and dm = c.JOB) post"
			+ " from drsyb_res.ACL_USER_PROPERTY c "
			+ "  where c.user_id = '" + userId + "'";

	return super.findByNativeSQL(sql, null, 0, -1);
}

/**
 * 插入并返回主键
 * @param userId 用户编号
 * @return
 */
public Integer addVersion(LeaveVersion leaveVersion){
	
	return (Integer) this.getHibernateTemplate().save(leaveVersion);
}

}

LeaveFile

package com.jlrdm.qj.bo;

public class LeaveFile {

	public String fId;// 主键
	public Integer fSeq;// 内部序号
	public String fName;// 附件名称(文件名)
	public Float fKbsize;
	public Integer fDiseq;// 详细资料序号(外键)
	public String fifvalid;// 是否有效
	public String furl;// 路劲
	//private LeaveVersion leaveVersion;

	public String getFurl() {
		return furl;
	}

	public void setFurl(String furl) {
		this.furl = furl;
	}

	/*public LeaveVersion getLeaveVersion() {
		return leaveVersion;
	}

	public void setLeaveVersion(LeaveVersion leaveVersion) {
		this.leaveVersion = leaveVersion;
	}*/

	public Integer getfDiseq() {
		return fDiseq;
	}

	public void setfDiseq(Integer fDiseq) {
		this.fDiseq = fDiseq;
	}

	public String getfId() {
		return fId;
	}

	public void setfId(String fId) {
		this.fId = fId;
	}

	public Integer getfSeq() {
		return fSeq;
	}

	public void setfSeq(Integer fSeq) {
		this.fSeq = fSeq;
	}

	public String getfName() {
		return fName;
	}

	public void setfName(String fName) {
		this.fName = fName;
	}

	public Float getfKbsize() {
		return fKbsize;
	}

	public void setfKbsize(Float fKbsize) {
		this.fKbsize = fKbsize;
	}

	public String getFifvalid() {
		return fifvalid;
	}

	public void setFifvalid(String fifvalid) {
		this.fifvalid = fifvalid;
	}

	@Override
	public String toString() {
		return "LeaveFile [fId=" + fId + ", fSeq=" + fSeq + ", fName=" + fName
				+ ", fKbsize=" + fKbsize + ", fDiseq=" + fDiseq + ", fifvalid="
				+ fifvalid + ", furl=" + furl + "]";
	}

}

LeaveVersion

package com.jlrdm.qj.bo;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class LeaveVersion {	
	public Integer fDiseq;//--序号
	public String fResName;//项目名称
	public String fDesc;//说明
	public String fVersion;//版本号
	public String fName;//发布人姓名
	public String fUserName;//发布人id
	public String fDept;//发布人部门号
	public Date fOpDt;//发布日期
	//private Set<LeaveFile> leaveFile = new HashSet<LeaveFile>();
	//public LeaveFile leaveFile;
	
	public Integer getfDiseq() {
		return fDiseq;
	}
	public void setfDiseq(Integer fDiseq) {
		this.fDiseq = fDiseq;
	}
	public String getfResName() {
		return fResName;
	}
	public void setfResName(String fResName) {
		this.fResName = fResName;
	}
	public String getfDesc() {
		return fDesc;
	}
	public void setfDesc(String fDesc) {
		this.fDesc = fDesc;
	}
	public String getfVersion() {
		return fVersion;
	}
	public void setfVersion(String fVersion) {
		this.fVersion = fVersion;
	}
	public String getfName() {
		return fName;
	}
	public void setfName(String fName) {
		this.fName = fName;
	}
	public String getfUserName() {
		return fUserName;
	}
	public void setfUserName(String fUserName) {
		this.fUserName = fUserName;
	}
	public String getfDept() {
		return fDept;
	}
	public void setfDept(String fDept) {
		this.fDept = fDept;
	}
	public Date getfOpDt() {
		return fOpDt;
	}
	public void setfOpDt(Date fOpDt) {
		this.fOpDt = fOpDt;
	}
	



	
	
}

uploadInfo

package com.jlrdm.qj.bo;

import java.io.File;
import java.util.Arrays;


public class UploadInfo {
	/** 上传的文件 */
	private File file;
	/** 相对路径 */
	private String absolutePath;
	/** 绝对路径 */
	private String RealPath;
	/** 上传文件名 */
	private String uploadFileName;
	/** 文件后缀 */
	private String fileSuffix;
	/** 文件别名 上传到tomcat的别名 */
	private String targetFileName;
	/** 文件路径 (相对路径+文件别名)*/
	private String filePath;
	/** 上传文件大小 */
	private String fileSize;
	/** 文件流转成byte,用于存储blob字段 */
	private byte[] fileByte;
	
	
	public File getFile() {
		return file;
	}
	public void setFile(File file) {
		this.file = file;
	}
	public String getAbsolutePath() {
		return absolutePath;
	}
	public void setAbsolutePath(String absolutePath) {
		this.absolutePath = absolutePath;
	}
	public String getRealPath() {
		return RealPath;
	}
	public void setRealPath(String realPath) {
		RealPath = realPath;
	}
	public String getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}
	public String getFileSuffix() {
		return fileSuffix;
	}
	public void setFileSuffix(String fileSuffix) {
		this.fileSuffix = fileSuffix;
	}
	public String getTargetFileName() {
		return targetFileName;
	}
	public void setTargetFileName(String targetFileName) {
		this.targetFileName = targetFileName;
	}
	public String getFilePath() {
		return filePath;
	}
	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}
	public String getFileSize() {
		return fileSize;
	}
	public void setFileSize(String fileSize) {
		this.fileSize = fileSize;
	}
	public byte[] getFileByte() {
		return fileByte;
	}
	public void setFileByte(byte[] fileByte) {
		this.fileByte = fileByte;
	}
	@Override
	public String toString() {
		return "UploadInfo [file=" + file + ", absolutePath=" + absolutePath
				+ ", RealPath=" + RealPath + ", uploadFileName="
				+ uploadFileName + ", fileSuffix=" + fileSuffix
				+ ", targetFileName=" + targetFileName + ", filePath="
				+ filePath + ", fileSize=" + fileSize + ", fileByte="
				+ Arrays.toString(fileByte) + "]";
	}
	

}

LeaveFile.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.jlrdm.qj.bo.LeaveFile" table="T_FILE">
		<id name="fId" type="java.lang.String">
			<column name="FID" />
			<generator class="uuid.hex" />
		</id>
		<property name="fSeq" type="java.lang.Integer" column="FSEQ"></property>

		<property name="fName" type="java.lang.String">
			<column name="FNAME">
			</column>
		</property>
		<!-- <many-to-one name="checker" column="CHECKER" class="com.ky.sys.bo.User" 
			/> -->

		<property name="fKbsize" type="java.lang.Integer" column="FKBSIZE"></property>

		<property name="furl" type="java.lang.String">
			<column name="FURL">
			</column>
		</property>
		
		<!-- <property name="fDiseq" type="java.lang.Integer">
			<column name="FDISEQ">
			</column>
		</property> -->


	<!-- <many-to-one name="fDiseq" class="com.jlrdm.qj.bo.LeaveVersion" column="FDISEQ" 
		/> -->
		
	<property name="fDiseq" type="java.lang.Integer">
		<column name="FDISEQ">
		</column>
	</property>
	
	<!-- <one-to-one name="fDiseq" class="com.jlrdm.qj.bo.LeaveVersion" column="FDISEQ" 
		cascade="save-update"></one-to-one> -->


		<property name="fifvalid" type="java.lang.String">
			<column name="FIFVALID" />
		</property>


	</class>

</hibernate-mapping>
	

LeaveVersion.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.jlrdm.qj.bo.LeaveVersion" table="T_VERSIONMANAGE">
		<id name="fDiseq" type="java.lang.Integer">
			<column name="FDISEQ" precision="10" scale="0" />
			<generator class="sequence">
				<param name="sequence">SEQ_VERSION</param>
			</generator>
		</id>
		<!-- <set name="leaveFile" cascade="all-delete-orphan"> <key column="fdiseq"></key> 
			<one-to-many class="com.jlrdm.qj.bo.LeaveFile"/> </set> -->


		<property name="fResName" type="java.lang.String" column="FRESNAME"></property>

		<property name="fDesc" type="java.lang.String">
			<column name="FDESC">
			</column>
		</property>
		<!-- <many-to-one name="checker" column="CHECKER" class="com.ky.sys.bo.User" 
			/> -->

		<property name="fVersion" type="java.lang.String" column="FVERSION"></property>

		<property name="fName" type="java.lang.String">
			<column name="FNAME">
			</column>
		</property>

		<property name="fUserName" type="java.lang.String">
			<column name="FUSERNAME" />
		</property>

		<property name="fDept" type="java.lang.String">
			<column name="FDEPT" />
		</property>

		<property name="fOpDt" type="java.util.Date">
			<column name="FOPDT" />
		</property>

		<!--  <set name="leaveFile"    cascade="delete">
			<key column="FDISEQ"></key>
			<one-to-many class="com.jlrdm.qj.bo.LeaveFile"/>
		</set>-->



	</class>

</hibernate-mapping>
	

文件工具类FileManageUtil

package com.jlrdm.qj.core.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import com.jlrdm.qj.bo.UploadInfo;
import com.ky.core.id.generator.ObjectId;
import com.ky.sys.exception.AclException;
import com.opensymphony.xwork2.ActionContext;


/**
 * 
 * 类名称:FileManageUtil
 * JIRA:http://192.168.0.234/browse/TODO
 * 类描述:文件管理工具类 包括上传下载等
 * 
 * 创建人: jmy
 * 创建时间:2018年8月17日 下午3:41:07
 * 
 * @author jmy
 * @date 2018年8月17日 下午3:41:07
 * @jira http://192.168.0.234/browse/TODO
 * @updateRemark 修改备注:创建
 *
 */
public class FileManageUtil {
	private static final Log log = LogFactory.getLog(FileManageUtil.class);
	/*********************** 接口定义 ***********************/
	
	
	/*********************** 变量定义 ***********************/
	
	
	/*********************** 实体定义 ***********************/
	
	
	/*********************** list定义 ***********************/
	
	/**
	 * 
	 * 方法描述:上传单个文件
	 * 
	 * @param upload 上传的文件
	 * @param uploadFileName 上传的文件名
	 * @param absolutePath 相对路径
	 * @return Map<String, Object> uploadInfo
	 * @author jmy
	 * @date 2018.8.30
	 */
	public static UploadInfo FileUpload (File upload, String uploadFileName, String absolutePath){
		UploadInfo uploadInfo = new UploadInfo();
		if(null != upload){
			String realPath = ServletActionContext.getServletContext().getRealPath(absolutePath);// 文件上传绝对路径
			
			File file =new File(realPath);    
			if(!file.exists()){
				file.mkdirs();
			}
			String fileSuffix = uploadFileName.substring(uploadFileName.lastIndexOf(".")); //文件后缀
			// 重新编辑文件名,防止上传的文件重名,用于以后删除文件
			ObjectId objectId = new ObjectId();
			String objId = objectId.toHexString();
			String targetFileName = objId + fileSuffix; // 文件别名
			File target = new File(realPath, targetFileName);
			
		
			
			try {
				
				InputStream input = null;    
			    OutputStream output = null;    
			    try {
			           input = new FileInputStream(upload);
			           output = new FileOutputStream(target);        
			           byte[] buf = new byte[1024];        
			           int bytesRead;        
			           while ((bytesRead = input.read(buf)) > 0) {
			               output.write(buf, 0, bytesRead);
			           }
			    } finally {
			        input.close();
			        output.close();
			    }



			} catch (IOException e) {
				System.out.println("上传出错:"+e);
				e.printStackTrace();
			}

			uploadInfo.setFile(upload);
			uploadInfo.setAbsolutePath(absolutePath);
			uploadInfo.setRealPath(realPath);
			uploadInfo.setUploadFileName(uploadFileName);
			uploadInfo.setFileSuffix(fileSuffix);
			uploadInfo.setFilePath(absolutePath+targetFileName);
			uploadInfo.setFileSize(checkFileSize(upload.length()));
		}

		return uploadInfo;
	}
	
	
	/**
	 * 
	 * 方法描述:上传多个文件
	 * 
	 * @param uploads 上传的文件列表
	 * @param uploadsFileName 上传的文件名列表
	 * @param absolutePath 相对路径
	 * @return List<UploadInfo> uploadInfoList  上传文件信息列表
	 * @author jmy
	 * @date 2018.8.30
	 */
	public static List<UploadInfo> FilesUpload (List<File> uploads, List<String> uploadsFileName, String absolutePath){
		List<UploadInfo> uploadInfoList = new ArrayList<UploadInfo>();
		if(null != uploads && uploads.size()>0){
			for(int i = 0; i < uploads.size(); i++){
				UploadInfo uploadInfo = new UploadInfo();
				uploadInfo = FileUpload(uploads.get(i), uploadsFileName.get(i), absolutePath);
				uploadInfoList.add(uploadInfo);
			}
		}
		return uploadInfoList;
	}
	
	/**
	 * 
	 * 方法描述:判断文件大小
	 * 
	 * @param fileSize
	 * @return
	 * @author jmy
	 * @date 2018.8.30
	 */
	public static String checkFileSize(long fileSize) {
		// 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
		double value = (double) fileSize;
		if (value < 1024) {
			return String.valueOf(value) + "B";
		} else {
			value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
		}
		// 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
		// 因为还没有到达要使用另一个单位的时候
		// 接下去以此类推
		if (value < 1024) {
			return String.valueOf(value) + "KB";
		} else {
			value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
		}
		if (value < 1024) {
			return String.valueOf(value) + "MB";
		} else {
			// 否则如果要以GB为单位的,先除于1024再作同样的处理
			value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
			return String.valueOf(value) + "GB";
		}
	}
	/**
	 * 
	 * 方法描述:文件下载
	 * 
	 * @param path
	 * @param name
	 * @param response
	 * @return
	 * @author lihaoqian
	 * @date 2018.8.31
	 */
	public static void doDownLoad(String path, String name,HttpServletResponse response) {
		ServletContext sc = (ServletContext) ActionContext.getContext().get(
				ServletActionContext.SERVLET_CONTEXT);	   			
		try {
			response.reset();
			response.setHeader("Content-disposition","attachment;success=true;filename ="
			+ URLEncoder.encode(name, "utf-8"));
			BufferedInputStream bis = null;
			BufferedOutputStream bos = null;
			OutputStream fos = null;
			InputStream fis = null;
			File uploadFile = new File(sc.getRealPath(path));
			fis = new FileInputStream(uploadFile);
			bis = new BufferedInputStream(fis);
			fos = response.getOutputStream();
			bos = new BufferedOutputStream(fos);
			// 弹出下载对话框
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
				bos.write(buffer, 0, bytesRead);
			}
			bos.flush();
			fis.close();
			bis.close();
			fos.close();
			bos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
	
	/**
	 * 
	 * 方法描述:单个文件流转成普通流
	 * 
	 * @param file 文件流
	 * @return InputStream 普通流
	 */
	public static InputStream fileToInputStream(File file){
		InputStream input = null;
		try {
			input = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return input;
	}
	
	
	/**
	 * 
	 * 方法描述:将file转成byte
	 * 
	 * @param upload
	 * @return
	 * @throws IOException
	 */
	@SuppressWarnings("resource")
	public static byte[] fileToByte(File upload) throws IOException{
		byte[] e = null;
		FileInputStream fi = null;
		if(upload != null) {
			fi = new FileInputStream(upload);
			e = new byte[fi.available()];
			fi.read(e);
		}
	    return e;
	}
	
	/**
	 * 
	 * 方法描述:上传单个文件存储成BLOB 
	 * 
	 * @param upload 上传的文件
	 * @param uploadFileName 上传的文件名
	 * @return Map<String, Object> uploadInfo
	 * @author jmy
	 * @throws IOException 
	 * @date 2018.8.30
	 */
	public static UploadInfo FileUploadToBLOB (File upload, String uploadFileName) throws IOException{
		UploadInfo uploadInfo = new UploadInfo();
		if(null != upload){
			// 1.1、文件后缀
			String fileSuffix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
			
			// 1.2、重新编辑文件名,防止上传的文件重名,用于以后删除文件(文件别名)
			ObjectId objectId = new ObjectId();
			String objId = objectId.toHexString();
			String targetFileName = objId + fileSuffix;
			
			// 1.3、将文件流转成byte
			byte[] fileByte = fileToByte(upload);
			
			uploadInfo.setFile(upload);
			uploadInfo.setUploadFileName(uploadFileName);
			uploadInfo.setFileSuffix(fileSuffix);
			uploadInfo.setTargetFileName(targetFileName);
			uploadInfo.setFileSize(checkFileSize(upload.length()));
			uploadInfo.setFileByte(fileByte);
		}
		return uploadInfo;
	}
	
	
	/**
	 * 
	 * 方法描述:上传多个文件
	 * 
	 * @param uploads 上传的文件列表
	 * @param uploadsFileName 上传的文件名列表
	 * @return List<UploadInfo> uploadInfoList  上传文件信息列表
	 * @throws IOException 
	 * @author jmy
	 * @date 2018.8.30
	 */
	public static List<UploadInfo> FileUploadToBLOBs (List<File> uploads, List<String> uploadsFileName) throws IOException{
		List<UploadInfo> uploadInfoList = new ArrayList<UploadInfo>();
		if(null != uploads && uploads.size()>0){
			for(int i = 0; i < uploads.size(); i++){
				UploadInfo uploadInfo = new UploadInfo();
				uploadInfo = FileUploadToBLOB(uploads.get(i), uploadsFileName.get(i));
				uploadInfoList.add(uploadInfo);
			}
		}
		return uploadInfoList;
	}
	
	public static void doDownLoadBLOB(byte[] fileByte, String fileName){
		HttpServletResponse response = ServletActionContext.getResponse();
		try {
			// 以流的形式下载文件
			response.reset();
			response.setHeader("Content-disposition","attachment;success=true;filename =" + URLEncoder.encode(fileName, "utf-8"));
			response.setCharacterEncoding("UTF-8");
			OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
			toClient.write(fileByte);
			toClient.flush();
			toClient.close();
		} catch (Exception e) {
			if (log.isErrorEnabled()) {
				log.error("下载BLOB文件失败!", e);
			}throw new AclException("下载BLOB文件失败!", e);
		}
		
		
	}
	
	/**
	 * 
	 * 方法描述:文件删除
	 * 
	 * @param path
	 * @param name
	 * @param response
	 * @return
	 * @author xao
	 * @date 2018.8.31
	 */
	public static boolean delFile(String path) {
		ServletContext sc = (ServletContext) ActionContext.getContext().get(
				ServletActionContext.SERVLET_CONTEXT);	   			
		try {
			File uploadFile = new File(sc.getRealPath(path));
			return uploadFile.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值