update to v1.0.10-RE

master
kohgylw 2019-01-07 10:05:51 +08:00
parent ccc296a788
commit 2b67299f2f
13 changed files with 357 additions and 141 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -34,6 +34,8 @@ _注kift为该功能的开发名称其实际成果命名为kiftd。_
## kiftd有哪些优势
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 无上传限制——1MB的文档和超过4GB的高清电影资源均能够随意上传和下载。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 支持移动端操作,即使没有数据线,手机、平板、电脑之间也能文件互传。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 主流商业网盘特有的高级功能甚至需要收费的功能——文件夹访问权限控制、MP4视频在线影院、MP3音乐在线欣赏、图片文件在线预览、PDF文档在线阅读...kiftd均一一具备每一份kiftd均是“完全版”。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 操作系统全兼容——无论是Windows、Linux还是Unix(包括Mac OS X),均可运行使用。
@ -74,39 +76,25 @@ _注kift为该功能的开发名称其实际成果命名为kiftd。_
> 提示:当您更新版本后,请手动清除浏览器的缓存,之后刷新网盘主页以确保数据文件保持最新!否则可能导致新版页面功能无法使用。
### 新版本v1.0.9
本次更新增加了一些新功能,方便用户操作。推荐所有用户升级体验。
+ 快捷键——为操作菜单中的每个操作项增加了快捷键Shift+?),以便于用户高效操作。
+ 连续选中——提供连续选中功能先选中一个文件然后在另一处Shift+双击,二者之间的文件均会被选中。
+ 上传判定——上传过程中,如果路径下已经存在同名文件,您可以为其选择“跳过”、“覆盖”和“保留两者”了。
+ 为“必须登录”界面增加回车快捷键。
+ 修正了下载文件时特殊符号显示不正确的问题。
### 新版本v1.0.10
+ 文件管理——现在期待已久的本地文件管理功能正式上线。该功能能够帮助您随时浏览kiftd中的文件和文件夹同时它还能帮助您快速地完成文件的导入和导出工作更多信息请见“kiftd说明文档”中的“管理kiftd中的文件”一节
+ 文件夹打包下载——该功能能够帮助您将整个文件夹打包为ZIP下载以便您快速下载层次较多的文件夹。此外文件夹们也能够进行批量操作了。
+ 移动端操作——新增移动端模式您可以在移动设备手机、平板电脑上无障碍地操作kiftd了。
+ 支持Safari——修正了在OS X和IOS系统下Safari浏览器无法在线播放视频和音频的问题方便Mac和iPhone用户在线观看视频和欣赏音乐同时也修复了使用Safari下载中文文件导致乱码的问题。
+ 支持FireFox——另一个强大的现代浏览器FireFox现已加入kiftd兼容序列。
+ MOV视频——在线播放功能增加了对 Apple QuickTime 视频的支持,该功能现在能够播放 Apple 用户录制的mov视频了。
+ 完善“移动”功能——修正了“剪切-粘贴”操作可能导致文件名冲突的BUG当移动有冲突的文件和文件夹时您可以为其选择“覆盖”、“保留两者”和“取消”了。
+ 自定义页面标题——在“kiftd说明文档”中新增了如何修改页面标题和提示信息的提示图文并茂方便用户对页面上的标题文字进行自定义更多信息请见“高级功能”一章中的“自定义kiftd的页面标题”一节
+ 在“设置”窗口中增加当前文件系统存储路径的显示——便于用户随时查看当前的文件系统所在位置。
+ 优化了Windows 10尤其是使用高分辨率显示器下UI界面的显示效果同时优化了Windows 10中任务栏图标如何避免任务栏图标被隐藏详见“在Windows系统下3分钟快速安装”一节最后的提示部分
+ 为上传状态增加提示信息——如果用户在上传过程中隐藏了窗口,则弹出提示提醒用户上传仍在继续并可以重新打开上传窗口查看上传进度。
+ 优化了“下载”功能,使其占用的内存更少。
+ 修正了“下载”功能可能导致日志重复记录的问题。
+ 修正了线音乐播放器在禁止自动播放的环境下,“播放”与“暂停”不同步的问题。
+ 高级集成MySQL——允许有需求的高级用户使用自有的MySQL数据库存储文件节点信息方便进行二次开发详见“高级功能”一章中的“将文件系统数据库替换为MySQL”一节
+ 其他一些功能的优化,进一步增强系统稳定性。
### 新版本v1.0.8
本次更新增加了一些新功能,同时进一步提高了稳定性,推荐所有用户升级体验。
+ 修正断点续传存在的问题——经一些使用者反馈该问题会导致下载速度越来越慢直至降为0。该问题已紧急修复确保主流下载工具软件能够正确进行多线程下载。
+ 图片分页预览——当需要预览超过15张图片时kiftd能自动将其分页您可以使用翻页功能查看所有图片。
+ 账户配置实时更新——现在更新账户配置无需要再重启kiftd了。kiftd会在运行中自动加载并更新账户配置文件只需稍等片刻便会生效。
+ 正确识别安装目录——现在kiftd能够识别自己到底被放置在哪个路径下了您也可以在任意路径下启动它了针对命令环境
+ 查看下载链接——为了进一步方便使用下载工具进行下载,您可以直接在下载提示框中直接查看下载链接了。
+ 修正了1MB以下体积文件的显示——它们现在会显示为“<1MB0MB
### 新版本v1.0.7
本次更新加入了新的功能,并对已有的问题进行修正,推荐所有用户升级体验。
+ 断点续传——现在kiftd的下载功能已经支持断点续传技术了这意味着您可以随时暂停并继续您的下载。同时该功能也为多线程下载技术提供了支持这意味着您还可以借助一些主流下载工具来进一步提高文件的下载速度。
+ 允许为一个账户设置多个小组——这一功能是为了方便某些账户能同时访问多个不同小组的文件夹这在团队使用中尤为必要。具体内容请见《kiftd说明文档》中的《为账户设置小组》一节。特别鸣谢逸轩居士
+ UI界面优化——进一步优化了界面操作。
+ 进一步优化了上传文件操作。
+ 修正了在线音乐播放功能在某些时候无法正确显示歌曲名称的BUG。
+ 修正了拖拽上传时无法在上传窗口中显示文件名的BUG。
+ 进一步完善了“回车”键的功能,使其更加符合多数用户的操作习惯。
+ (临时更新)图片预览优化——现在图片预览能够正确识别使用cmyk格式的图片了这使得您可以正常预览经过处理的JPGE图像。
### 优化更新v1.0.6
本次更新主要为解决日常使用过程中出现的问题和BUG推荐所有用户升级。
+ 修正了IE11浏览器无法上传文件的BUG——现在您可以使用IE浏览器正常上传文件了不过无法拖拽上传该功能依旧需要现代浏览器支持同时您也可以正常在IE11浏览器中预览图片和播放音乐。注意即使增加了对IE的兼容性不过考虑到目前微软已经停止对IE的支持因此kiftd仍旧推荐您使用一款现代浏览器进行访问和操作。
+ 增加了对国产高速浏览器和WebKit插件的支持——现在当您使用主流国产高速浏览器访问kiftd时其页面会自动切换至“极速模式”浏览而无需再手动切换。同时如果您安装了WebKit插件那么也能获得更好的浏览体验。
+ 修复了拖拽上传与普通上传的冲突BUG。
> 需要查看更多版本历史信息?请访问: https://kohgylw.gitee.io/News.html
--------------------
## Functional Examples

BIN
filesystem/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@ -45,5 +45,11 @@
UPDATE FOLDER SET folder_constraint = #{newConstraint,jdbcType=INTEGER} WHERE folder_id
= #{folderId,jdbcType=VARCHAR}
</update>
<update id="moveById" parameterType="java.util.Map">
UPDATE FOLDER SET
folder_parent = #{locationpath,jdbcType=VARCHAR} WHERE folder_id =
#{folderId,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -32,8 +32,8 @@
}
.heading {
margin-top:-10px;
margin-bottom:-10px;
margin-top: -10px;
margin-bottom: -10px;
}
.centerText {
@ -67,6 +67,14 @@ body {
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
}
.wordbreak{
word-break:break-all
.wordbreak {
word-break: break-all
}
.filetableheaderstyle {
height: 40px;
float: left;
height: 100%;
margin-top: 15px;
overflow: hidden;
}

View File

@ -1 +1 @@
@charset "UTF-8";.titlebox{height:30px;line-height:30px;padding-top:5px;padding-bottom:5px;padding-left:10px;padding-right:10px;position:relative;bottom:-7px}.titletext{color:#000;font-size:22px}.graytext{color:#8b8b8b}.subtitle{color:#5cacee;text-align:center}.rightbtn{border-right:10px;float:right;margin-left:10px}.heading{margin-top:-10px;margin-bottom:-10px}.centerText{text-align:center}.uploadstatusbox{color:#9c9c9c;height:48px;overflow:auto}html{height:100%}body{height:100%}.loading{line-height:56px;color:#545454;padding-left:60px;font-size:15px;background:#fff url(loading.gif) no-repeat 10px 50%;opacity:.7;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;filter:alpha(opacity=70)}.wordbreak{word-break:break-all}
@charset "UTF-8";.titlebox{height:30px;line-height:30px;padding-top:5px;padding-bottom:5px;padding-left:10px;padding-right:10px;position:relative;bottom:-7px}.titletext{color:#000;font-size:22px}.graytext{color:#8b8b8b}.subtitle{color:#5cacee;text-align:center}.rightbtn{border-right:10px;float:right;margin-left:10px}.heading{margin-top:-10px;margin-bottom:-10px}.centerText{text-align:center}.uploadstatusbox{color:#9c9c9c;height:48px;overflow:auto}html{height:100%}body{height:100%}.loading{line-height:56px;color:#545454;padding-left:60px;font-size:15px;background:#fff url(loading.gif) no-repeat 10px 50%;opacity:.7;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;filter:alpha(opacity=70)}.wordbreak{word-break:break-all}.filetableheaderstyle{height:40px;float:left;height:100%;margin-top:15px;overflow:hidden}

View File

@ -6,7 +6,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
<title>KIFT</title>
<!-- Bootstrap基本框架 -->
<link rel="stylesheet" href="css/bootstrap.min.css">
@ -18,7 +18,7 @@
<link rel="stylesheet" href="css/APlayer.min.css">
<!-- 页面图标 -->
<link rel="icon" type="image/x-icon" href="css/icon.png" />
<!-- 尴尬的支持老古董浏览器专用设置我最终还是决定加上了因为确实不能保证每个人都有一个chrome -->
<!-- 对旧浏览器的支持部分... -->
<!--[if lt IE 9]>
<script src="js/html5shiv.min.js"></script>
<script src="js/respond.min.js"></script>
@ -28,12 +28,16 @@
<body>
<!-- 显示主体 -->
<div class="container">
<!-- 页面标题 -->
<!-- 页面标题 -->
<div class="row">
<div class="col-md-12">
<div class="titlebox">
<span class="titletext"><em> 青阳网络文件传输系统 <small><span
class="graytext">KIFT</span></small></em></span> <span id="tb" class="rightbtn"></span>
<span class="titletext"> <!-- 主标题,如需修改请替换后方标签内的文字 --> <em>
青阳网络文件传输系统 <small> <!-- 副标题,如需修改请替换后方标签内的文字 --> <span
class="graytext">KIFT</span>
</small>
</em>
</span> <span id="tb" class="rightbtn"></span>
<button class="btn btn-link rightbtn" onclick="refreshFolderView()">
刷新 <span class="glyphicon glyphicon-repeat" aria-hidden="true"></span>
</button>
@ -44,6 +48,12 @@
<!-- 信息栏、操作栏与文件列表 -->
<div class="row">
<div class="col-md-12">
<p id="vicetbbox" class="subtitle" style="display: none;">
<span id="tb2"></span>
<button class="btn btn-link" onclick="refreshFolderView()">
刷新 <span class="glyphicon glyphicon-repeat" aria-hidden="true"></span>
</button>
</p>
<p class="subtitle">
文件同步时间:<span id="publishTime"></span>
</p>
@ -56,12 +66,13 @@
<div class="panel-heading">
<div class="heading">
<div class="navbar-header">
<a href="javascript:void(0);" class="navbar-text"
data-toggle="modal" data-target="#folderInfoModal"><span
id="folderIconSpan" class="glyphicon glyphicon-folder-close"></span>&ensp;&ensp;<span
id="currentFolderName"></span></a>
<a id="filetableheadera" href="javascript:void(0);"
class="navbar-text" data-toggle="modal"
data-target="#folderInfoModal"><span id="folderIconSpan"
class="glyphicon glyphicon-folder-close"></span>&ensp;&ensp;<span
id="currentFolderName"></span> <span id="mdropdownicon"></span></a>
</div>
<div class="collapse navbar-collapse">
<div class="collapse navbar-collapse" id="filetableoptmenu">
<ul class="nav navbar-nav">
<li class="dropdown"><a href="javascript:void(0);"
class="dropdown-toggle" data-toggle="dropdown" role="button"
@ -69,7 +80,8 @@
class="caret"></span></a>
<ul class="dropdown-menu" id="parentFolderList"></ul></li>
</ul>
<form class="navbar-form navbar-left">
<form id="filetableoptmenusreach"
class="navbar-form navbar-left">
<div class="form-group">
<input id="sreachKeyWordIn" type="text" class="form-control"
placeholder="请输入文件名...">
@ -79,7 +91,8 @@
</form>
<ul class="nav navbar-nav navbar-right">
<li id="packageDownloadBox"></li>
<li class="dropdown"><a class="dropdown-toggle"
<li class="dropdown" id="operationMenuBox"
data-toggle="popover"><a class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false"><span
class="glyphicon glyphicon-cog"></span> 操作 <span
@ -97,7 +110,7 @@
<span class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+C</span>
</span></a></li>
<li id="deleteSeelectFileButtonLi"><a>批量删除 <span
<li id="deleteSeelectFileButtonLi"><a>删除 <span
class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+D</span></a></li>
</ul></li>
@ -110,12 +123,12 @@
<tr>
<th onclick="sortbyfn()">文件名<span id="sortByFN"
aria-hidden="true" style="float: right"></span></th>
<th onclick="sortbycd()">创建日期<span id="sortByCD"
aria-hidden="true" style="float: right"></span></th>
<th class="hiddenColumn" onclick="sortbycd()">创建日期<span
id="sortByCD" aria-hidden="true" style="float: right"></span></th>
<th onclick="sortbyfs()">大小<span id="sortByFS"
aria-hidden="true" style="float: right"></span></th>
<th onclick="sortbycn()">创建者<span id="sortByCN"
aria-hidden="true" style="float: right"></span></th>
<th class="hiddenColumn" onclick="sortbycn()">创建者<span
id="sortByCN" aria-hidden="true" style="float: right"></span></th>
<th onclick="showOriginFolderView()">操作</th>
</tr>
</thead>
@ -361,12 +374,20 @@
<div id="selectFileUpLoadModelAlert" class="alert alert-danger"
role="alert">
<h4>提示:存在同名文件!</h4>
<p>您要上传的文件“<span id="repeFileName"></span>”已存在于该路径下,您希望:</p>
<p><input id="selectFileUpLoadModelAsAll" type="checkbox"> 全部应用</p>
<p>
<button type="button" class="btn btn-danger btn-sm" onclick="selectFileUpLoadModelEnd('cover')">覆盖</button>
<button type="button" class="btn btn-default btn-sm" onclick="selectFileUpLoadModelEnd('skip')">跳过</button>
<button type="button" class="btn btn-default btn-sm" onclick="selectFileUpLoadModelEnd('both')">保留两者</button>
您要上传的文件“<span id="repeFileName"></span>”已存在于该路径下,您希望:
</p>
<p>
<input id="selectFileUpLoadModelAsAll" type="checkbox">
全部应用
</p>
<p>
<button type="button" class="btn btn-danger btn-sm"
onclick="selectFileUpLoadModelEnd('cover')">覆盖</button>
<button type="button" class="btn btn-default btn-sm"
onclick="selectFileUpLoadModelEnd('skip')">跳过</button>
<button type="button" class="btn btn-default btn-sm"
onclick="selectFileUpLoadModelEnd('both')">保留两者</button>
</p>
</div>
</div>
@ -521,7 +542,7 @@
</button>
<button type="button" class="btn btn-primary" id="playOrPause"
onclick="audio_playOrPause()">
<span class="glyphicon glyphicon-pause" aria-hidden="true"></span>
<span class='glyphicon glyphicon-play' aria-hidden='true'></span>
</button>
<button type="button" class="btn btn-default" onclick="audio_fw()">
<span class="glyphicon glyphicon-forward" aria-hidden="true"></span>
@ -559,6 +580,25 @@
</div>
<div class="modal-body">
<h5 id="moveFilesMessage"></h5>
<div id="selectFileMoveModelAlert" class="alert alert-danger"
role="alert">
<h4>提示:存在同名文件!</h4>
<p>
您要移动的文件“<span id="mrepeFileName"></span>”已存在于该路径下,您希望:
</p>
<p>
<input id="selectFileMoveModelAsAll" type="checkbox">
全部应用
</p>
<p>
<button type="button" class="btn btn-danger btn-sm"
onclick="selectFileMoveModel('cover')">覆盖</button>
<button type="button" class="btn btn-default btn-sm"
onclick="selectFileMoveModel('skip')">跳过</button>
<button type="button" class="btn btn-default btn-sm"
onclick="selectFileMoveModel('both')">保留两者</button>
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>

View File

@ -25,12 +25,19 @@ var checkFilesTip="提示:您还未选择任何文件,请先选中一些文
// 界面功能方法定义
// 页面初始化
$(function() {
window.onresize = function(){
changeFilesTableStyle();
}
getServerOS();// 得到服务器操作系统信息
showFolderView("root");// 显示根节点页面视图
// 点击空白处取消选中文件(不支持火狐)
// 点击空白处取消选中文件(已尝试兼容火狐,请期待用户反馈,如不好使再改
$(document).click(function(e) {
var filetable = $("#filetable")[0];
if (e.target !== filetable && !$.contains(filetable, e.target)) {
var srcElement = e.srcElement;
if (!srcElement) {
srcElement = e.target;
}
if (srcElement !== filetable && !$.contains(filetable, e.target)) {
$(".filerow").removeClass("info");
}
});
@ -98,6 +105,25 @@ $(function() {
$('#newFolderModal').on('shown.bs.modal', function(e) {
$("#foldername").focus();
});
// 关闭上传模态框时自动提示如何查看上传进度
$('#uploadFileModal').on('hidden.bs.modal', function(e) {
if(isUpLoading){
$('#operationMenuBox').attr("data-placement", "top");
$('#operationMenuBox').attr("data-trigger", "focus");
$('#operationMenuBox').attr("data-title", "上传中");
$('#operationMenuBox').attr("data-content", "您可以重新打开上传窗口查看上传进度。");
$('#operationMenuBox').popover();
$('#operationMenuBox').popover('show');
// 2秒后消失提示框
var closeUploadTips = setTimeout(
function () {
$('#operationMenuBox').attr("data-title", "");
$('#operationMenuBox').attr("data-content", "");
$('#operationMenuBox').popover('destroy');
}, 2000
);
}
});
// 开启编辑文件夹框自动初始化状态
$('#renameFolderModal').on('show.bs.modal', function(e) {
$("#newfolderalert").removeClass("alert");
@ -197,7 +223,7 @@ $(function() {
$(document).keypress(function (e) {
if($('.modal.shown').length == 0 || ($('.modal.shown').length == 1 && $('.modal.shown').attr('id') == 'loadingModal')){
var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
if (window.event.shiftKey) {
if (isShift(e)) {
switch (keyCode) {
case 65:
checkallfile();
@ -212,7 +238,9 @@ $(function() {
$('#deleteSeelectFileButtonLi a').click();
break;
case 67:
$('#cutFileButtonLi a').click();
if((!$("#cutSignTx").hasClass("cuted"))&&checkedMovefiles==undefined){
$('#cutFileButtonLi a').click();
}
break;
case 86:
if($("#cutSignTx").hasClass("cuted")&&checkedMovefiles!==undefined){
@ -259,6 +287,33 @@ $(function() {
});
});
// 根据屏幕大小增删表格显示内容
function changeFilesTableStyle(){
var win = $(window).width();
if(win < 800){
$('#filetableheadera').addClass('filetableheaderstyle');
$('.hiddenColumn').hide();
$('.rightbtn').hide();
$('#vicetbbox').show();
$('#filetableoptmenusreach').hide();
}else{
$('#filetableheadera').removeClass('filetableheaderstyle');
$('.hiddenColumn').show();
$('.rightbtn').show();
$('#vicetbbox').hide();
$('#filetableoptmenusreach').show();
}
if(win < 768){
$('#filetableheadera').attr('data-toggle','collapse');
$('#filetableheadera').attr('data-target','#filetableoptmenu');
$('#mdropdownicon').html('(点击展开/折叠菜单)');
}else{
$('#filetableheadera').attr('data-toggle','modal');
$('#filetableheadera').attr('data-target','#folderInfoModal');
$('#mdropdownicon').html('');
}
}
// 全局请求失败提示
function doAlert(){
alert("错误无法连接到kiftd服务器请检查您的网络连接或查看服务器运行状态。");
@ -504,7 +559,7 @@ function showParentList(folderView) {
// 显示用户视图,包括文件列表、登录信息、操作权限接口等
function showAccountView(folderView) {
$("#tb").html("");
$("#tb,#tb2").html("");
account=folderView.account;
if (folderView.account != null) {
// 说明已经等陆,显示注销按钮
@ -513,11 +568,19 @@ function showAccountView(folderView) {
"<button class='btn btn-link rightbtn' data-toggle='modal' data-target='#logoutModal'>注销 ["
+ folderView.account
+ "] <span class='glyphicon glyphicon-off' aria-hidden='true'></span></button>");
$("#tb2")
.append(
"<button class='btn btn-link' data-toggle='modal' data-target='#logoutModal'>注销 ["
+ folderView.account
+ "] <span class='glyphicon glyphicon-off' aria-hidden='true'></span></button>");
} else {
// 说明用户未登录,显示登录按钮
$("#tb")
.append(
"<button class='btn btn-link rightbtn' data-toggle='modal' data-target='#loginModal'>登入 <span class='glyphicon glyphicon-user' aria-hidden='true'></span></button>");
$("#tb2")
.append(
"<button class='btn btn-link' data-toggle='modal' data-target='#loginModal'>登入 <span class='glyphicon glyphicon-user' aria-hidden='true'></span></button>");
}
var authList = folderView.authList;
// 对操作菜单进行初始化,根据权限显示可操作的按钮(并非约束)。
@ -602,7 +665,7 @@ function showFolderTable(folderView) {
if (parentpath != null && parentpath != "null") {
$("#foldertable")
.append(
"<tr onclick='returnPF()'><td><button onclick='returnPF()' class='btn btn-link btn-xs'>../</button></td><td>--</td><td>--</td><td>--</td><td>--</td></tr>");
"<tr onclick='returnPF()'><td><button onclick='returnPF()' class='btn btn-link btn-xs'>../</button></td><td class='hiddenColumn'>--</td><td>--</td><td class='hiddenColumn'>--</td><td>--</td></tr>");
}
var authList = folderView.authList;
var aD = false;
@ -621,11 +684,11 @@ function showFolderTable(folderView) {
.each(
folderView.folderList,
function(n, f) {
var folderRow = "<tr><td><button onclick='entryFolder("
var folderRow = "<tr id='"+f.folderId+"' onclick='checkfile(event,"+'"'+f.folderId+'"'+")' ondblclick='checkConsFile(event,"+'"'+f.folderId+'"'+")' class='filerow' iskfolder='true' ><td><button onclick='entryFolder("
+ '"' + f.folderId + '"'
+ ")' class='btn btn-link btn-xs'>/"
+ f.folderName + "</button></td><td>"
+ f.folderCreationDate + "</td><td>--</td><td>"
+ f.folderName + "</button></td><td class='hiddenColumn'>"
+ f.folderCreationDate + "</td><td>--</td><td class='hiddenColumn'>"
+ f.folderCreator + "</td><td>";
if (aD) {
folderRow = folderRow
@ -658,16 +721,16 @@ function showFolderTable(folderView) {
.each(
folderView.fileList,
function(n, fi) {
var fileRow = "<tr onclick='checkfile(" + '"'
+ fi.fileId + '"' + ")' ondblclick='checkConsFile("+'"'+fi.fileId+'"'+")' id='" + fi.fileId
var fileRow = "<tr onclick='checkfile(event," + '"'
+ fi.fileId + '"' + ")' ondblclick='checkConsFile(event,"+'"'+fi.fileId+'"'+")' id='" + fi.fileId
+ "' class='filerow'><td>" + fi.fileName
+ "</td><td>" + fi.fileCreationDate;
+ "</td><td class='hiddenColumn'>" + fi.fileCreationDate + "</td>";
if(fi.fileSize=="0"){
fileRow=fileRow+"</td><td>&lt;1MB</td><td>";
fileRow=fileRow+"<td>&lt;1MB</td>";
}else{
fileRow=fileRow+"</td><td>" + fi.fileSize + "MB</td><td>";
fileRow=fileRow+"<td>" + fi.fileSize + "MB</td>";
}
fileRow=fileRow + fi.fileCreator + "</td><td>";
fileRow=fileRow +"<td class='hiddenColumn'>" + fi.fileCreator + "</td><td>";
if (aL) {
fileRow = fileRow
+ "<button onclick='showDownloadModel("
@ -679,7 +742,7 @@ function showFolderTable(folderView) {
+ ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-cloud-download'></span> 下载</button>";
// 对于各种特殊格式文件提供的预览和播放功能
if (getSuffix(fi.fileName) == "mp4"
|| getSuffix(fi.fileName) == "webm") {
|| getSuffix(fi.fileName) == "webm" || getSuffix(fi.fileName) == "mov") {
fileRow = fileRow
+ "<button onclick='playVideo("
+ '"'
@ -743,6 +806,7 @@ function showFolderTable(folderView) {
fileRow = fileRow + "</td></tr>";
$("#foldertable").append(fileRow);
});
changeFilesTableStyle();
}
var folderTypes=['公开的','仅小组','仅创建者'];// 文件夹约束条件(由小至大)
@ -922,17 +986,17 @@ function renameFolder(folderId) {
if (result == "noAuthorized") {
showRenameFolderAlert("提示:您的操作未被授权,编辑失败");
} else if (result == "errorParameter") {
showRenameFolderAlert("提示:参数不正确,编辑失败");
showRenameFolderAlert("提示:参数不正确,编辑失败,请刷新后重试");
} else if (result == "renameFolderSuccess") {
$('#renameFolderModal').modal('hide');
showFolderView(locationpath);
} else {
showRenameFolderAlert("提示:出现意外错误,可能未能编辑文件夹");
showRenameFolderAlert("提示:出现意外错误,可能未能编辑文件夹,请刷新后重试");
}
}
},
error : function() {
showRenameFolderAlert("提示:出现意外错误,可能未能编辑文件夹");
showRenameFolderAlert("提示:出现意外错误,可能未能编辑文件夹,请刷新后重试");
}
});
} else {
@ -963,6 +1027,7 @@ function showUploadFileModel() {
$("#filecount").text("");
$("#uploadstatus").text("");
$("#selectcount").text("");
$("#selectFileUpLoadModelAsAll").removeAttr("checked");
$("#selectFileUpLoadModelAlert").hide();
}
$('#uploadFileModal').modal('show');
@ -1050,9 +1115,9 @@ function checkUploadFile() {
}
}
var repeList;//这个是重复文件名的列表,型如['xxx','ooo',...]
var repeIndex;//当前设定上传模式的文件序号
var repeModelList;//这个是对每一个重复文件选取的上传模式,型如{'xxx':'skip','ooo':'both',...}
var repeList;// 这个是重复文件名的列表,型如['xxx','ooo',...]
var repeIndex;// 当前设定上传模式的文件序号
var repeModelList;// 这个是对每一个重复文件选取的上传模式,型如{'xxx':'skip','ooo':'both',...}
// 针对同名文件选择上传的模式跳过skip、覆盖cover和保留两者both
function selectFileUpLoadModelStart(){
@ -1302,16 +1367,16 @@ function renameFile(fileId) {
window.location.href = "login.html";
} else {
if (result == "cannotRenameFile") {
showRenameFolderAlert("提示:出现意外错误,可能未能重命名文件");
showRenameFolderAlert("提示:出现意外错误,可能未能重命名文件,请刷新后重试");
} else if (result == "renameFileSuccess") {
$('#renameFileModal').modal('hide');
showFolderView(locationpath);
} else if (result == "errorParameter") {
showRenameFolderAlert("提示:参数错误,重命名失败");
showRenameFolderAlert("提示:参数错误,重命名失败,请刷新后重试");
} else if (result == "noAuthorized") {
showRenameFolderAlert("提示:您的操作未被授权,重命名失败");
showRenameFolderAlert("提示:您的操作未被授权,重命名失败,请刷新后重试");
} else {
showRenameFolderAlert("提示:出现意外错误,可能未能重命名文件");
showRenameFolderAlert("提示:出现意外错误,可能未能重命名文件,请刷新后重试");
}
}
},
@ -1489,9 +1554,19 @@ function createViewListByPage() {
}
}
// 兼容Chrome、IE、FF的Shift判定
function isShift(event){
var e=window.event ||event;
if(e.shiftKey){
return true;
}else{
return false;
}
}
// 选中某一行文件如果使用Shift点击则为多选
function checkfile(fileId) {
if(!window.event.shiftKey){
function checkfile(event,fileId) {
if(!isShift(event)){
$(".filerow").removeClass("info");
$("#" + fileId).addClass("info");
}else{
@ -1504,8 +1579,8 @@ function checkfile(fileId) {
}
// 连续选中若干行文件Shift+双击,选中规则为:前有选前,后有选后,全有也选后。
function checkConsFile(fileId){
if(window.event.shiftKey){
function checkConsFile(event,fileId){
if(isShift(event)){
var endRow=$("#" + fileId);
var endRowIndex=endRow.index();
var startRowIndex=$('.filerow.info:last').index();
@ -1525,16 +1600,34 @@ function checkConsFile(fileId){
}
}
var checkAll = true;
// 用于获取全部选中的文件夹和文件ID该function返回一个对象。
// 该对象中filesId属性为文件IDfoldersId属性为文件夹ID。两个属性均为JSON数组形式的字符串可直接发送至服务器。此外还有size包含了元素的总数。
function getCheckedFilesAndFolders(){
var filesAndFolders=new Object();
filesAndFolders.size=0;
var filesId=new Array();
var foldersId=new Array();
var checkedfiles = $(".info").get();
for (var i = 0; i < checkedfiles.length; i++) {
if(checkedfiles[i].getAttribute("iskfolder")=="true"){
foldersId.push(checkedfiles[i].id);
}else{
filesId.push(checkedfiles[i].id);
}
filesAndFolders.size++;
}
filesAndFolders.filesId = JSON.stringify(filesId);
filesAndFolders.foldersId = JSON.stringify(foldersId);
return filesAndFolders;
}
// 切换全部文件行的选中或非选中
function checkallfile() {
if (checkAll) {
$(".filerow").addClass("info");
checkAll = false;
} else {
if ($(".filerow.info").length==$(".filerow").length) {
$(".filerow").removeClass("info");
checkAll = true;
} else {
$(".filerow").addClass("info");
}
}
@ -1542,12 +1635,12 @@ function checkallfile() {
function showDownloadAllCheckedModel() {
$("#downloadAllCheckedBox").html("");
$("#downloadAllCheckedLoad").text("");
var checkedfiles = $(".info").get();
if (checkedfiles.length == 0) {
var faf=getCheckedFilesAndFolders();
if (faf.size == 0) {
$("#downloadAllCheckedName").html(checkFilesTip);
} else {
$("#downloadAllCheckedName").text(
"提示:您确认要打包并下载这" + checkedfiles.length + "项么?");
"提示:您确认要打包并下载这" + faf.size + "项么?");
$("#downloadAllCheckedBox")
.html(
"<button id='dclmbutton' type='button' class='btn btn-primary' onclick='downloadAllChecked()'>开始下载</button>");
@ -1559,21 +1652,17 @@ function showDownloadAllCheckedModel() {
// 下载选中的所有文件
function downloadAllChecked() {
$("#dclmbutton").attr('disabled', true);
var checkedfiles = $(".info").get();
var downloadIdArray = new Array();
for (var i = 0; i < checkedfiles.length; i++) {
downloadIdArray[i] = checkedfiles[i].id;
}
var strIdList = JSON.stringify(downloadIdArray);
var faf=getCheckedFilesAndFolders();
$("#downloadAllCheckedName").text(
"提示:服务器正在对选中资源进行压缩(共" + checkedfiles.length
"提示:服务器正在对选中资源进行压缩(共" + faf.size
+ "项),这可能需要一些时间(文件越大耗时越长),压缩完成将自动开始下载。");
// 计算预计耗时
$.ajax({
url:'homeController/getPackTime.ajax',
type:'POST',
data:{
strIdList:strIdList
strIdList:faf.filesId,
strFidList:faf.foldersId
},
dataType:'text',
success:function(result){
@ -1602,7 +1691,8 @@ function downloadAllChecked() {
type : "POST",
url : "homeController/downloadCheckedFiles.ajax",
data : {
strIdList : strIdList
strIdList:faf.filesId,
strFidList:faf.foldersId
},
dataType : "text",
success : function(result) {
@ -1639,16 +1729,16 @@ function downloadAllChecked() {
// 删除选中的所有文件
function showDeleteAllCheckedModel() {
$('#deleteFileBox').html("");
var checkedfiles = $(".info").get();
var faf=getCheckedFilesAndFolders();
$("#dfmbutton").attr('disabled', false);
if (checkedfiles.length == 0) {
if (faf.size == 0) {
$('#deleteFileMessage').html(checkFilesTip);
} else {
$('#deleteFileBox')
.html(
"<button id='dfmbutton' type='button' class='btn btn-danger' onclick='deleteAllChecked()'>全部删除</button>");
$('#deleteFileMessage').text(
"提示:确定要彻底删除这" + checkedfiles.length + "项么?该操作不可恢复");
"提示:确定要彻底删除这" + faf.size + "项么?该操作不可恢复");
}
$('#deleteFileModal').modal('toggle');
}
@ -1656,19 +1746,15 @@ function showDeleteAllCheckedModel() {
// 删除选中的所有文件
function deleteAllChecked() {
// TODO 提交全部删除请求
var checkedfiles = $(".info").get();
var downloadIdArray = new Array();
for (var i = 0; i < checkedfiles.length; i++) {
downloadIdArray[i] = checkedfiles[i].id;
}
var strIdList = JSON.stringify(downloadIdArray);
var faf=getCheckedFilesAndFolders();
$("#dfmbutton").attr('disabled', true);
$('#deleteFileMessage').text("提示:正在删除,请稍候...");
$.ajax({
type : "POST",
dataType : "text",
data : {
strIdList : strIdList
strIdList : faf.filesId,
strFidList : faf.foldersId
},
url : "homeController/deleteCheckedFiles.ajax",
success : function(result) {
@ -1862,40 +1948,128 @@ function showOriginFolderView(){
// 确认文件移动(剪切-粘贴)操作
function startMoveFile(){
if($("#cutSignTx").hasClass("cuted")&&checkedMovefiles!==undefined){
var moveIdArray = new Array();
for (var i = 0; i < checkedMovefiles.length; i++) {
moveIdArray[i] = checkedMovefiles[i].id;
}
var strIdList = JSON.stringify(moveIdArray);
$('#moveFilesMessage').text("提示:确定将这"+checkedMovefiles.length+"项移动到当前位置么?");
$('#moveFilesMessage').text("提示:确定将这"+checkedMovefiles.size+"项移动到当前位置么?");
$('#moveFilesBox').html("<button id='dmvfbutton' type='button' class='btn btn-danger' onclick='doMoveFiles()'>全部移动</button>");
$("#selectFileMoveModelAsAll").removeAttr("checked");
$("#selectFileMoveModelAlert").hide();
$('#moveFilesModal').modal('show');
}else{
checkedMovefiles = $("#foldertable .info").get();
if (checkedMovefiles==undefined||checkedMovefiles.length == 0) {
checkedMovefiles = getCheckedFilesAndFolders();
if (checkedMovefiles==undefined||checkedMovefiles.size == 0) {
$('#moveFilesMessage').html(checkFilesTip);
$("#selectFileMoveModelAsAll").removeAttr("checked");
$("#selectFileMoveModelAlert").hide();
$('#moveFilesModal').modal('show');
} else {
$("#cutSignTx").html("粘贴("+checkedMovefiles.length+"<span class='pull-right'><span class='glyphicon glyphicon-arrow-up' aria-hidden='true'></span>+V</span>");
$("#cutSignTx").html("粘贴("+checkedMovefiles.size+"<span class='pull-right'><span class='glyphicon glyphicon-arrow-up' aria-hidden='true'></span>+V</span>");
$("#cutSignTx").addClass("cuted");
}
}
}
var repeMap;
var strMoveOptMap;
var mRepeSize;
// 执行文件移动操作
function doMoveFiles(){
var moveIdArray = new Array();
for (var i = 0; i < checkedMovefiles.length; i++) {
moveIdArray[i] = checkedMovefiles[i].id;
}
var strIdList = JSON.stringify(moveIdArray);
$("#dmvfbutton").attr('disabled', true);
$('#moveFilesMessage').text("提示:正在移动,请稍候...");
// 确认移动目标位置
$.ajax({
type : "POST",
dataType : "text",
data : {
strIdList : strIdList,
strIdList : checkedMovefiles.filesId,
strFidList : checkedMovefiles.foldersId,
locationpath:locationpath
},
url : "homeController/confirmMoveFiles.ajax",
success : function(result) {
if (result == "mustLogin") {
window.location.href = "login.html";
} else {
if (result == "noAuthorized") {
$('#moveFilesMessage').text("提示:您的操作未被授权,移动失败");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "errorParameter") {
$('#moveFilesMessage').text("提示:参数不正确,未能全部移动文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "cannotMoveFiles") {
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "confirmMoveFiles") {
strMoveOptMap={};
sendMoveFilesReq();
} else if(result.startsWith("duplicationFileName:")){
repeMap=eval("("+result.substring(20)+")");
repeIndex=0;
strMoveOptMap={};
mRepeSize=repeMap.repeFolders.length+repeMap.repeNodes.length;
if(repeMap.repeFolders.length>0){
$("#mrepeFileName").text(repeMap.repeFolders[repeIndex].folderName);
}else{
$("#mrepeFileName").text(repeMap.repeNodes[repeIndex].fileName);
}
$("#selectFileMoveModelAlert").show();
} else if(result.startsWith("CANT_MOVE_TO_INSIDE:")){
$('#moveFilesMessage').text("错误:不能将一个文件夹移动到其自身内部:"+result.substring(20));
} else {
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
}
}
},
error : function() {
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件");
$("#dmvfbutton").attr('disabled', false);
}
});
}
//对冲突的移动进行依次询问
function selectFileMoveModel(t){
if($("#selectFileMoveModelAsAll").prop("checked")){
while(repeIndex<mRepeSize){
if(repeIndex<repeMap.repeFolders.length){
strMoveOptMap[repeMap.repeFolders[repeIndex].folderId]=t;
}else{
strMoveOptMap[repeMap.repeNodes[repeIndex-repeMap.repeFolders.length].fileId]=t;
}
repeIndex++;
}
$("#selectFileMoveModelAlert").hide();
sendMoveFilesReq();
}
if(repeIndex<repeMap.repeFolders.length){
strMoveOptMap[repeMap.repeFolders[repeIndex].folderId]=t;
}else{
strMoveOptMap[repeMap.repeNodes[repeIndex-repeMap.repeFolders.length].fileId]=t;
}
repeIndex++;
if(repeIndex<mRepeSize){
if(repeIndex<repeMap.repeFolders.length){
$("#mrepeFileName").text(repeMap.repeFolders[repeIndex].folderName);
}else{
$("#mrepeFileName").text(repeMap.repeNodes[repeIndex-repeMap.repeFolders.length].fileName);
}
}else{
$("#selectFileMoveModelAlert").hide();
sendMoveFilesReq();
}
}
function sendMoveFilesReq(){
// 执行移动行为
var strOptMap = JSON.stringify(strMoveOptMap);
$.ajax({
type : "POST",
dataType : "text",
data : {
strIdList : checkedMovefiles.filesId,
strFidList : checkedMovefiles.foldersId,
strOptMap : strOptMap,
locationpath:locationpath
},
url : "homeController/moveCheckedFiles.ajax",
@ -1907,16 +2081,16 @@ function doMoveFiles(){
$('#moveFilesMessage').text("提示:您的操作未被授权,移动失败");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "errorParameter") {
$('#moveFilesMessage').text("提示:参数不正确,未能全部移动文件");
$('#moveFilesMessage').text("提示:参数不正确,未能全部移动文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "cannotMoveFiles") {
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件");
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
} else if (result == "moveFilesSuccess") {
$('#moveFilesModal').modal('hide');
showFolderView(locationpath);
} else {
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件");
$('#moveFilesMessage').text("提示:出现意外错误,可能未能移动全部文件,请刷新后重试");
$("#dmvfbutton").attr('disabled', false);
}
}

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
<title>KIFT</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/overrall.min.css">

View File

@ -101,8 +101,8 @@
$("#playerbox")
.html(
"<video id='kiftplayer' class='video-js col-md-12' controls preload='auto' height='500'>"
+ "<source src='fileblocks/"+f.filePath+"' type='video/mp4'>"
+ "<source src='fileblocks/"+f.filePath+"' type='video/webm'>"
+ "<source src='resourceController/getResource.do?fid="+f.fileId+"' type='video/mp4'>"
+ "<source src='resourceController/getResource.do?fid="+f.fileId+"' type='video/webm'>"
+ "</video>");
var player = videojs('kiftplayer');
player.ready(function() {