update to v1.0.20

master
kohgylw 2019-08-18 10:16:36 +08:00
parent 3f90a299a1
commit a95e8d2247
10 changed files with 696 additions and 264 deletions

View File

@ -33,9 +33,9 @@ _注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) 无上传限制——不足1MB的文档和超过5GB的高清电影资源均能够随意上传和下载。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 主流商业网盘特有的高级功能甚至需要收费的功能——文件夹访问权限控制、多格式视频在线影院、音乐在线欣赏、图片文件在线预览、Word & PDF & TXT文档在线阅读...kiftd均一一具备每一份kiftd均是“完全版”。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 主流商业网盘特有的高级功能甚至需要收费的功能——文件夹访问级别控制、视频在线影院、Word/PPT/TXT/PDF文档在线预览、音乐在线欣赏、图片库在线预览...kiftd均一一具备每一份kiftd均是“完全版”。
![mark](https://github.com/KOHGYLW/kiftd-showPicture/blob/master/mark_icon.png?raw=true) 操作系统全兼容——无论是Windows、Linux还是Unix(包括Mac OS X),均可运行使用。
@ -77,20 +77,15 @@ _注kift为该功能的开发名称其实际成果命名为kiftd。_
> 提示:当您更新版本后,请手动清除浏览器的缓存,之后刷新网盘主页以确保数据文件保持最新!否则可能导致新版页面功能无法使用。
### 新版本v1.0.19
_本次更新增加了一些用户期待的新功能并对已知的问题进行了修复进一步增强kiftd的使用体验。推荐所有用户升级。_
+ 上传文件体积限制功能现已加入该功能允许您为每个用户或所有用户单独设置其上传文件的最大体积限制从而更加灵活地管理上传配额。设置方法详见随程序附带的《kiftd说明文档》。
+ 可自定义的登录验证码类型。现在,您可以根据需要自由选择登录验证码的类型,包括“标准(较难识别)”、“简化(容易识别)”和“关闭(不需要验证码)”三种,以便适应不同的使用环境和安全性需求。
+ 升级了内置JAVE视频解码引擎的版本解决了其在Windows 32位操作系统下无法正确运行的BUG同时降低了解码时的内存占用并使其能够兼容Java 9+。
+ 放宽文件夹名称的长度限制至128个字符方便用户使用更长的名称命名文件夹。
+ 增加浏览文件夹路径记忆功能——当您刷新页面或是打开新的kiftd页面时文件列表将会重新显示您之前正在浏览的文件夹。
+ 进一步完善了文件夹视图系统:当用户试图打开一个不存在的文件夹时,将直接返回根目录。
+ 进一步优化了文件管理界面:当您使用拖拽的方法导入文件时,能够显示导入进度。
+ 优化MySQL配置检查机制当MySQL连接失败时系统不再将“mysql.enable”一项的值自动重置为“false”从而避免用户误操作的情况发生。
+ 修复了当文件名存在特殊符号时,其下载链接无法被服务器正确解析的问题。
+ 修复了上传、视频播放和音乐播放过程中,因用户凭证失效可能导致操作被中断问题。
+ 修复了使用预览功能打开空的Word或TXT文档时无法正确显示的问题。
+ 修复了一个可能导致文件列表被HTML或JS代码注入的漏洞特别鸣谢GitHub用户“showuon”
### 新版本v1.0.20
_本次更新增加了较多用户们一直期待的、实用性较强的新功能进一步增强kiftd的使用体验。推荐所有用户升级体验。_
+ 文件夹上传——现在众多用户期待已久的上传文件夹功能现已上线。当用户同时具备“上传”和“新建文件夹”权限时便可使用该功能进行文件夹的上传同时还可以像新建文件夹一样自由设置上传后的文件夹的访问级别。详情请见《kiftd说明文档》。
+ PPT预览功能——现在众多用户期待已久的PPT文档在线预览功能正式上线方便办公使用。PPT预览功能提供ppt和pptx格式的在线打开和预览且该功能无需额外安装任何插件可免费用于商业用途。注在线预览无法显示动画效果部分复杂内容可能与官方PPT版式有所差异。
+ 添加扩展存储区——现在kiftd的文件系统允许用户额外添加最多31个“扩展存储区”路径。这些“扩展存储区”能够设置在不同的硬盘分区中并分担“主文件系统存储区”的存储压力从而方便用户在不借助硬盘阵列技术的前提下使用多块硬盘来进一步扩展kiftd的可用容量。详情请见《kiftd说明文档》。
+ 升级了文件列表的排序功能——文件列表现在可以对文件的各项属性进行切换式的双向(升序/降序)排序。
+ 优化文件列表的显示顺序——文件列表现在将按照上传的时间由新至旧向下排列显示,更加贴合用户的查看习惯。
+ 优化配置检查机制——当配置出现错误后系统将不再自动还原初配置文件,以便用户根据提示信息进行检查和修改。
+ 进一步提高了文件系统的安全性和稳定性。
> 需要查看更多版本历史信息?请访问: https://kohgylw.gitee.io/News.html

Binary file not shown.

BIN
kiftd-1.0.20-RELEASE.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -99,13 +99,16 @@
class="glyphicon glyphicon-cog"></span> 操作 <span
class="caret"></span></a>
<ul class="dropdown-menu" id="fileListDropDown">
<li id="createFolderButtonLi"><a>新建文件夹 <span
class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+N</span></a></li>
<li role="separator" class="divider"></li>
<li id="uploadFileButtonLi"><a>上传文件 <span
class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+U</span></a></li>
<li id="uploadFolderButtonLi"><a>上传文件夹 <span
class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+F</span></a></li>
<li role="separator" class="divider"></li>
<li id="createFolderButtonLi"><a>新建文件夹 <span
class="pull-right"><span
class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>+N</span></a></li>
<li role="separator" class="divider"></li>
<li id="cutFileButtonLi"><a><span id='cutSignTx'>剪切
<span class="pull-right"><span
@ -322,7 +325,7 @@
</div>
</div>
</div>
<div id="newfolderalert" role="alert"></div>
<div id="editfolderalert" role="alert"></div>
</form>
</div>
<div class="modal-footer">
@ -372,7 +375,7 @@
<div id="uploadstatus" class="uploadstatusbox"></div>
</div>
</div>
<div id="uploadFileAlert" role="alert"></div>
<div id="uploadFileAlert" role="alert" class="alert alert-danger"></div>
<div id="selectFileUpLoadModelAlert" class="alert alert-danger"
role="alert">
<h4>提示:存在同名文件!</h4>
@ -404,6 +407,83 @@
</div>
</div>
<!-- end 上传文件 -->
<!-- 上传文件夹框 -->
<div class="modal fade" id="importFolderModal" tabindex="-1"
role="dialog" aria-labelledby="importFolderMolderTitle">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="importFolderMolderTitle">
<span class="glyphicon glyphicon-cloud-upload"></span> 上传文件夹
</h4>
</div>
<div class="modal-body">
<h5>选择文件夹:</h5>
<div class="input-group">
<input type="text" id="folderpath" class="form-control"
onclick="checkimportpath()" onfocus="this.blur()"
placeholder="请点击选择要上传的文件夹……" folderConstraintLevel="0">
<div class="input-group-btn">
<button id="importFolderLevelBtn" type="button" class="btn btn-default dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
&nbsp;<span id="importfoldertype">公开的</span>&nbsp;<span
class="caret"></span>
</button>
<ul id="importfoldertypelist"
class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
<input type="file" id="importfolder" style="display: none;"
onchange="getInputImport()" multiple="multiple" webkitdirectory>
<h5>
上传进度:<span id="importcount"></span>
</h5>
<div class="progress">
<div id="importpros" class="progress-bar" role="progressbar"
aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
style="width: 0%;">
<span class="sr-only"></span>
</div>
</div>
<h5>上传状态:</h5>
<div class="panel panel-default">
<div class="panel-body">
<div id="importstatus" class="uploadstatusbox"></div>
</div>
</div>
<div id="importFolderAlert" class="alert alert-danger" role="alert"></div>
<div id="selectFolderImportModelAlert" class="alert alert-danger"
role="alert">
<h4>提示:存在同名文件夹!</h4>
<p>
您要上传的文件夹“<span id="repeFolderName"></span>”已存在于该路径下,您希望:
</p>
<p>
<button id="importcoverbtn" type="button"
class="btn btn-danger btn-sm"
onclick="importAndCover()">覆盖</button>
<button type="button" class="btn btn-default btn-sm"
onclick="abortImport()">取消上传</button>
<button type="button" class="btn btn-default btn-sm"
onclick="importAndBoth()">保留两者</button>
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" onclick='abortImport()'>取消</button>
<button id="importbutton" type='button' class='btn btn-primary'
onclick='checkImportFolder()'>开始上传</button>
</div>
</div>
</div>
</div>
<!-- end 上传文件夹 -->
<!-- 下载提示框 -->
<div class="modal fade" id="downloadModal" tabindex="-1" role="dialog"
aria-labelledby="downloadModelTitle">

View File

@ -10,11 +10,14 @@ var zipTimer;// 打包下载计时器
var folderView;// 返回的文件系统视图对象
var originFolderView;// 保存原始的文件视图对象
var fs;// 选中的要上传的文件列表
var ifs;// 选中的要上传的文件夹内的文件列表
var checkedMovefiles;// 移动文件的存储列表
var constraintLevel;// 当前文件夹限制等级
var account;// 用户账户
var isUpLoading=false;// 是否正在执行其他上传操作
var xhr;// 文件上传请求对象
var isUpLoading=false;// 是否正在执行上传操作
var isImporting=false;// 是否正在执行上传文件夹操作
var importFolderName;// 上传文件夹时保存文件夹名称
var xhr;// 文件或文件夹上传请求对象
var viewerPageSize = 15; // 显示图片页的最大长度,注意最好是奇数
var viewer; // viewer对象用于预览图片功能
var viewerPageIndex; // 分页预览图片——已浏览图片页号
@ -22,7 +25,6 @@ var viewerTotal; // 分页预览图片——总页码数
var pvl;// 预览图片列表的JSON格式对象
var checkFilesTip="提示:您还未选择任何文件,请先选中一些文件后再执行本操作:<br /><br /><kbd>单击</kbd>:选中某一文件<br /><br /><kbd><kbd>Shift</kbd>+<kbd>单击</kbd></kbd>:选中多个文件<br /><br /><kbd><kbd>Shift</kbd>+<kbd>双击</kbd></kbd>:选中连续的文件<br /><br /><kbd><kbd>Shitf</kbd>+<kbd>A</kbd></kbd>:选中/取消选中所有文件";// 选取文件提示
var winHeight;// 窗口高度
var uploadKey;// 上传所用的一次性密钥
var pingInt;// 定时应答器的定时装置
// 界面功能方法定义
@ -128,8 +130,8 @@ $(function() {
$("#foldername").focus();
});
// 关闭上传模态框时自动提示如何查看上传进度
$('#uploadFileModal').on('hidden.bs.modal', function(e) {
if(isUpLoading){
$('#uploadFileModal,#importFolderModal').on('hidden.bs.modal', function(e) {
if(isUpLoading || isImporting){
$('#operationMenuBox').attr("data-placement", "top");
$('#operationMenuBox').attr("data-trigger", "focus");
$('#operationMenuBox').attr("data-title", "上传中");
@ -148,10 +150,10 @@ $(function() {
});
// 开启编辑文件夹框自动初始化状态
$('#renameFolderModal').on('show.bs.modal', function(e) {
$("#newfolderalert").removeClass("alert");
$("#newfolderalert").removeClass("alert-danger");
$("#editfolderalert").removeClass("alert");
$("#editfolderalert").removeClass("alert-danger");
$("#folderrenamebox").removeClass("has-error");
$("#newfolderalert").text("");
$("#editfolderalert").text("");
$("#editfoldertypelist").html("");
if(account!=null){
for(var i=constraintLevel;i<folderTypes.length;i++){
@ -181,7 +183,7 @@ $(function() {
}
if (folderView.authList != null) {
if (checkAuth(folderView.authList, "U")) {// 如果有上传权限且未进行其他上传
if(isUpLoading){
if(isUpLoading || isImporting){
alert("提示:您正在执行另一项上传任务,请在上传窗口关闭后再试。");
}else{
if (!(window.ActiveXObject||"ActiveXObject" in window)){// 判断是否为IE
@ -241,7 +243,7 @@ $(function() {
alert("提示:您不具备上传权限,无法上传文件。");
}
}
// Shift+A全选文件/反选文件Shift+N新建文件夹Shift+U上传文件Shift+C&V剪切粘贴Shift+D批量删除
// Shift+A全选文件/反选文件Shift+N新建文件夹Shift+U上传文件Shift+F导入文件夹Shift+C&V剪切粘贴Shift+D批量删除
$(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;
@ -259,6 +261,9 @@ $(function() {
case 68:
$('#deleteSeelectFileButtonLi a').click();
break;
case 70:
$('#uploadFolderButtonLi a').click();
break;
case 67:
if((!$("#cutSignTx").hasClass("cuted"))&&checkedMovefiles==undefined){
$('#cutFileButtonLi a').click();
@ -672,6 +677,10 @@ function showAccountView(folderView) {
if (checkAuth(authList, "U")) {
$("#uploadFileButtonLi").removeClass("disabled");
$("#uploadFileButtonLi a").attr("onclick","showUploadFileModel()");
if(checkAuth(authList, "C") && isSupportWebkitdirectory()){// 若浏览器支持文件夹选择,且具备新建文件夹权限,则允许进行文件夹上传
$("#uploadFolderButtonLi").removeClass("disabled");
$("#uploadFolderButtonLi a").attr("onclick","showUploadFolderModel()");
}
}
if (checkAuth(authList, "L")) {
$("#packageDownloadBox")
@ -761,10 +770,9 @@ function showFolderTable(folderView) {
if (checkAuth(authList, "O")){
aO = true;
}
$
.each(
folderView.folderList,
function(n, f) {
// 遍历并倒序显示文件夹列表
for(var i1=folderView.folderList.length;i1>0;i1--){
var f=folderView.folderList[i1-1];
f.folderName = f.folderName.replace('\'','&#39;').replace('<','&lt;').replace('>','&gt;');
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 + '"'
@ -808,11 +816,10 @@ function showFolderTable(folderView) {
}
folderRow = folderRow + "</td></tr>";
$("#foldertable").append(folderRow);
});
$
.each(
folderView.fileList,
function(n, fi) {
}
// 遍历并倒序显示文件列表
for(var i2=folderView.fileList.length;i2>0;i2--){
var fi = folderView.fileList[i2-1];
fi.fileName = fi.fileName.replace('\'','&#39;').replace('<','&lt;').replace('>','&gt;');
var fileRow = "<tr id=" + fi.fileId + " onclick='checkfile(event," + '"'
+ fi.fileId + '"' + ")' ondblclick='checkConsFile(event,"+'"'+fi.fileId+'"'+")' id='" + fi.fileId
@ -896,6 +903,15 @@ function showFolderTable(folderView) {
+ '"'
+ ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-eye-open'></span> 预览</button>";
break;
case "ppt":
case "pptx":
fileRow = fileRow
+ "<button onclick='pptView("
+ '"'
+ fi.fileId
+ '"'
+ ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-eye-open'></span> 预览</button>";
break;
default:
break;
}
@ -937,7 +953,7 @@ function showFolderTable(folderView) {
}
fileRow = fileRow + "</td></tr>";
$("#foldertable").append(fileRow);
});
}
changeFilesTableStyle();
}
@ -1140,16 +1156,15 @@ function renameFolder(folderId) {
// 显示重命名文件夹状态提示
function showRFolderAlert(txt) {
$("#newfolderalert").addClass("alert");
$("#newfolderalert").addClass("alert-danger");
$("#editfolderalert").addClass("alert");
$("#editfolderalert").addClass("alert-danger");
$("#folderrenamebox").addClass("has-error");
$("#newfolderalert").text(txt);
$("#editfolderalert").text(txt);
}
// 显示上传文件模态框
function showUploadFileModel() {
$("#uploadFileAlert").removeClass("alert");
$("#uploadFileAlert").removeClass("alert-danger");
$("#uploadFileAlert").hide();
$("#uploadFileAlert").text("");
if(isUpLoading==false){
$("#filepath").removeAttr("disabled");
@ -1159,7 +1174,7 @@ function showUploadFileModel() {
$("#pros").attr('aria-valuenow','0');
$("#umbutton").attr('disabled', false);
$("#filecount").text("");
$("#uploadstatus").text("");
$("#uploadstatus").html("");
$("#selectcount").text("");
$("#selectFileUpLoadModelAsAll").removeAttr("checked");
$("#selectFileUpLoadModelAlert").hide();
@ -1195,16 +1210,15 @@ function showfilepath() {
$("#filepath").val(filename);
}
// 检查是否能够上传
// 检查文件是否能够上传
function checkUploadFile() {
if(isUpLoading==false){
if(isUpLoading==false && isImporting == false){
if(fs!=null&&fs.length>0){
$("#filepath").attr("disabled","disabled");
$("#umbutton").attr('disabled', true);
isUpLoading=true;
repeModelList=null;
$("#uploadFileAlert").removeClass("alert");
$("#uploadFileAlert").removeClass("alert-danger");
$("#uploadFileAlert").hide();
$("#uploadFileAlert").text("");
var filenames = new Array();
var maxSize = 0;
@ -1238,7 +1252,6 @@ function checkUploadFile() {
showUploadFileAlert("提示:您的操作未被授权,无法开始上传");
} else {
var resp=eval("("+result+")");
uploadKey=resp.uploadKey;
if(resp.checkResult == "fileTooLarge"){
showUploadFileAlert("提示:文件["+resp.overSizeFile+"]的体积超过最大限制("+resp.maxUploadFileSize+"),无法开始上传");
}else if(resp.checkResult == "hasExistsNames"){
@ -1260,6 +1273,8 @@ function checkUploadFile() {
}else{
showUploadFileAlert("提示:您未选择任何文件,无法开始上传");
}
}else{
showUploadFileAlert("提示:另一项上传文件或文件夹的任务尚未完成,无法开始上传");
}
}
@ -1279,6 +1294,7 @@ function selectFileUpLoadModelStart(){
$("#repeFileName").text(repeList[repeIndex]);
}
// 设定重名文件的处理方法
function selectFileUpLoadModelEnd(t){
if(repeModelList == null){
repeModelList={};
@ -1320,7 +1336,6 @@ function doupload(count) {
fd.append("file", uploadfile);// 将文件对象添加到FormData对象中字段名为uploadfile
fd.append("folderId", locationpath);
fd.append("uploadKey", uploadKey);
if(repeModelList != null && repeModelList[fname] != null){
if(repeModelList[fname] == 'skip'){
$("#uls_" + count).text("[已完成]");
@ -1407,6 +1422,7 @@ function doupload(count) {
}
}
// 显示上传文件进度
function uploadProgress(evt) {
if (evt.lengthComputable) {
// evt.loaded文件上传的大小 evt.total文件总的大小
@ -1421,12 +1437,21 @@ function uploadProgress(evt) {
function showUploadFileAlert(txt) {
isUpLoading=false;
$("#filepath").removeAttr("disabled");
$("#uploadFileAlert").addClass("alert");
$("#uploadFileAlert").addClass("alert-danger");
$("#uploadFileAlert").show();
$("#uploadFileAlert").text(txt);
$("#umbutton").attr('disabled', false);
}
// 取消上传文件
function abortUpload() {
isUpLoading=false;
if (xhr != null) {
xhr.abort();
}
$('#uploadFileModal').modal('hide');
showFolderView(locationpath);
}
// 显示下载文件模态框
function showDownloadModel(fileId, fileName) {
$("#downloadFileName").text("提示:您确认要下载文件:[" + fileName + "]么?");
@ -1571,24 +1596,6 @@ function showRFileAlert(txt) {
$("#newFileNamealert").text(txt);
}
// 取消上传
function abortUpload() {
isUpLoading=false;
if (xhr != null) {
xhr.abort();
$("#umbutton").attr('disabled', false);
$("#pros").width("0%");
$("#pros").attr('aria-valuenow',"0");
$("#filecount").text("");
}
$("#uploadfile").val("");
$("#filepath").val("");
$("#uploadstatus").html("");
$("#selectcount").text("");
$('#uploadFileModal').modal('hide');
showFolderView(locationpath);
}
// 获取文件名的后缀名,以小写形式输出
function getSuffix(filename) {
var index1 = filename.lastIndexOf(".");
@ -1617,6 +1624,11 @@ function txtView(fileId){
window.open("/pdfview/web/viewer.html?file=/resourceController/getTxtView/" + fileId);
}
// 预览PPT文档
function pptView(fileId){
window.open("/pdfview/web/viewer.html?file=/resourceController/getPPTView/" + fileId);
}
// 查看图片
function showPicture(fileId) {
$.ajax({
@ -2053,15 +2065,23 @@ function audio_vulome_down(){
// 按文件名排序
function sortbyfn(){
$("#sortByFN").addClass("glyphicon glyphicon-triangle-bottom");
$("#sortByCD").removeClass();
$("#sortByFS").removeClass();
$("#sortByCN").removeClass();
var order=1;
if($("#sortByFN").hasClass('glyphicon-triangle-bottom')){
$("#sortByFN").removeClass();
$("#sortByFN").addClass("glyphicon glyphicon-triangle-top");
order=-1;
}else{
$("#sortByFN").removeClass();
$("#sortByFN").addClass("glyphicon glyphicon-triangle-bottom");
}
folderView.fileList.sort(function(v1,v2){
return v1.fileName.localeCompare(v2.fileName,"zh");
return order * v2.fileName.localeCompare(v1.fileName,"zh");
});
folderView.folderList.sort(function(v1,v2){
return v1.folderName.localeCompare(v2.folderName,"zh");
return order * v2.folderName.localeCompare(v1.folderName,"zh");
});
showFolderTable(folderView);
}
@ -2069,20 +2089,28 @@ function sortbyfn(){
// 按创建日期排序
function sortbycd(){
$("#sortByFN").removeClass();
$("#sortByCD").addClass("glyphicon glyphicon-triangle-bottom");
$("#sortByFS").removeClass();
$("#sortByCN").removeClass();
var order=1;
if($("#sortByCD").hasClass('glyphicon-triangle-bottom')){
$("#sortByCD").removeClass();
$("#sortByCD").addClass("glyphicon glyphicon-triangle-top");
order=-1;
}else{
$("#sortByCD").removeClass();
$("#sortByCD").addClass("glyphicon glyphicon-triangle-bottom");
}
folderView.fileList.sort(function(v1,v2){
var v1DateStr=v1.fileCreationDate.replace("年","-").replace("月","-").replace("日","");
var v2DateStr=v2.fileCreationDate.replace("年","-").replace("月","-").replace("日","");
var res=((new Date(Date.parse(v1DateStr)).getTime())-(new Date(Date.parse(v2DateStr)).getTime()));
return -1*res;
return order * res;
});
folderView.folderList.sort(function(v1,v2){
var v1DateStr=v1.folderCreationDate.replace("年","-").replace("月","-").replace("日","");
var v2DateStr=v2.folderCreationDate.replace("年","-").replace("月","-").replace("日","");
var res=((new Date(Date.parse(v1DateStr)).getTime())-(new Date(Date.parse(v2DateStr)).getTime()));
return -1*res;
return order * res;
});
showFolderTable(folderView);
}
@ -2091,11 +2119,21 @@ function sortbycd(){
function sortbyfs(){
$("#sortByFN").removeClass();
$("#sortByCD").removeClass();
$("#sortByFS").addClass("glyphicon glyphicon-triangle-bottom");
$("#sortByCN").removeClass();
// 正倒序判断
if($("#sortByFS").hasClass("glyphicon-triangle-bottom")){
$("#sortByFS").removeClass();
$("#sortByFS").addClass("glyphicon glyphicon-triangle-top");
folderView.fileList.sort(function(v1,v2){
return v2.fileSize-v1.fileSize;
return v2.fileSize - v1.fileSize;
});
}else{
$("#sortByFS").removeClass();
$("#sortByFS").addClass("glyphicon glyphicon-triangle-bottom");
folderView.fileList.sort(function(v1,v2){
return v1.fileSize - v2.fileSize;
});
}
showFolderTable(folderView);
}
@ -2104,12 +2142,20 @@ function sortbycn(){
$("#sortByFN").removeClass();
$("#sortByCD").removeClass();
$("#sortByFS").removeClass();
var order=1;
if($("#sortByCN").hasClass('glyphicon-triangle-bottom')){
$("#sortByCN").removeClass();
$("#sortByCN").addClass("glyphicon glyphicon-triangle-top");
order=-1;
}else{
$("#sortByCN").removeClass();
$("#sortByCN").addClass("glyphicon glyphicon-triangle-bottom");
}
folderView.fileList.sort(function(v1,v2){
return v1.fileCreator.localeCompare(v2.fileCreator,"zh");
return order * v2.fileCreator.localeCompare(v1.fileCreator,"zh");
});
folderView.folderList.sort(function(v1,v2){
return v1.folderCreator.localeCompare(v2.folderCreator,"zh");
return order * v2.folderCreator.localeCompare(v1.folderCreator,"zh");
});
showFolderTable(folderView);
}
@ -2448,3 +2494,305 @@ function ping(){
}
});
}
// 判断浏览器是否支持webkitdirectory属性且不为ios系统判断是否能进行文件夹上传
function isSupportWebkitdirectory() {
var testWebkitdirectory = document.createElement("input");
if("webkitdirectory" in testWebkitdirectory && !(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent))) {
return true;
} else {
return false;
}
};
// 显示上传文件夹模态框
function showUploadFolderModel(){
$("#importFolderAlert").hide();
$("#importFolderAlert").text("");
if(isImporting == false){// 如果未进行上传,则还原上传文件夹的基本状态
$("#folderpath").val("");
$("#importfolder").val("");
$("#importpros").width("0%");
$("#importpros").attr('aria-valuenow','0');
$("#importstatus").html("");
$("#folderpath").attr("disabled",false);
$("#importFolderLevelBtn").attr("disabled",false);
$("#importcount").text("");
$("#importbutton").attr('disabled', false);
$("#importfoldertypelist").html("");
$("#selectFolderImportModelAlert").hide();
if(account!=null){
$("#folderpath").attr("folderConstraintLevel",constraintLevel+"");
$("#importfoldertype").text(folderTypes[constraintLevel]);
for(var i=constraintLevel;i<folderTypes.length;i++){
$("#importfoldertypelist").append("<li><a onclick='changeImportFolderType("+i+")'>"+folderTypes[i]+"</a></li>");
}
}else{
$("#importfoldertypelist").append("<li><a onclick='changeImportFolderType(0)'>"+folderTypes[0]+"</a></li>");
}
}
$("#importFolderModal").modal('show');
}
// 点击上传路径文本框时弹出文件夹选择窗口
function checkimportpath(){
$('#importfolder').click();
}
// 用户选择文件夹后回填路径
function getInputImport(){
ifs = $("#importfolder")[0].files;
if(ifs.length > 0) {
importFolderName = ifs[0].webkitRelativePath.substring(0, ifs[0].webkitRelativePath.indexOf("/"));
$("#folderpath").val(importFolderName);
}
}
// 检查文件夹是否能够上传
function checkImportFolder(){
if(isUpLoading == false && isImporting ==false){
if(ifs != null && ifs.length > 0){// 必须选中文件
$("#folderpath").attr("disabled",true);
$("#importFolderLevelBtn").attr("disabled",true);
$("#importbutton").attr('disabled', true);
$("#importFolderAlert").hide();
$("#importFolderAlert").text("");
isImporting = true;
var maxSize = 0;
var maxFileIndex = 0;
// 找出最大体积的文件避免服务器进行效验
for (var i = 0; i < ifs.length; i++) {
if(ifs[i].size > maxSize){
maxSize = ifs[i].size;
maxFileIndex = i;
}
}
// 发送合法性检查请求
$.ajax({
url:'homeController/checkImportFolder.ajax',
type:'POST',
dataType:'text',
data:{
folderName : importFolderName,
maxSize : maxSize,
folderId : locationpath
},
success:function(result){
var resJson = eval("("+result+")");
switch (resJson.result) {
case 'noAuthorized':
showImportFolderAlert("提示:您的操作未被授权,无法开始上传");
break;
case 'errorParameter':
showImportFolderAlert("提示:参数不正确,无法开始上传");
break;
case 'mustLogin':
window.location.href = "login.html";
break;
case 'fileOverSize':
showImportFolderAlert("提示:文件["+ifs[maxFileIndex].webkitRelativePath+"]的体积超过最大限制("+resJson.maxSize+"),无法开始上传");
break;
case 'repeatFolder_Both':
$("#repeFolderName").text(importFolderName);
$("#importcoverbtn").hide();
$("#selectFolderImportModelAlert").show();
break;
case 'repeatFolder_coverOrBoth':
$("#repeFolderName").text(importFolderName);
$("#importcoverbtn").show();
$("#selectFolderImportModelAlert").show();
break;
case 'permitUpload':
iteratorImport(0);// 直接允许上传
break;
default:
showImportFolderAlert("提示:出现意外错误,无法开始上传");
break;
}
},
error:function(){
showImportFolderAlert("提示:出现意外错误,无法开始上传");
}
});
}else{
showImportFolderAlert("提示:您未选择任何文件夹,无法开始上传");
}
}else{
showImportFolderAlert("提示:另一项上传文件或文件夹的任务尚未完成,无法开始上传");
}
}
// 显示上传文件夹错误提示
function showImportFolderAlert(txt) {
isImporting=false;
$("#folderpath").attr("disabled",false);
$("#importFolderLevelBtn").attr("disabled",false);
$("#importFolderAlert").show();
$("#importFolderAlert").text(txt);
$("#importbutton").attr('disabled', false);
}
// 显示上传文件夹进度
function importProgress(evt) {
if (evt.lengthComputable) {
// evt.loaded文件上传的大小 evt.total文件总的大小
var percentComplete = Math.round((evt.loaded) * 100 / evt.total);
// 加载进度条,同时显示信息
$("#importpros").width(percentComplete + "%");
$("#importpros").attr('aria-valuenow',""+percentComplete);
}
}
// 覆盖并上传文件夹
function importAndCover() {
$("#selectFolderImportModelAlert").hide();
$.ajax({
url:'homeController/deleteFolderByName.ajax',
type:'POST',
data:{
parentId : locationpath,
folderName : importFolderName
},
dataType:'text',
success:function(result){
if(result == 'deleteSuccess'){
iteratorImport(0);// 若覆盖成功,则开始上传
}else{
showImportFolderAlert("提示:无法覆盖原文件夹,上传失败");
}
},
error:function(){
showImportFolderAlert("提示:无法覆盖原文件夹,上传失败");
}
});
}
// 保留两者并上传文件夹
function importAndBoth() {
$("#selectFolderImportModelAlert").hide();
var fc=$("#folderpath").attr("folderConstraintLevel");// 文件夹访问级别
$.ajax({
url:'homeController/createNewFolderByName.ajax',
type:'POST',
data:{
parentId : locationpath,
folderName : importFolderName,
folderConstraint : fc
},
dataType:'text',
success:function(result){
var resJson = eval("(" + result + ")");
if(resJson.result == 'success'){
iteratorImport(0,resJson.newName);// 若新建成功,则使用新文件夹名称开始上传
}else{
showImportFolderAlert("提示:生成新文件夹名称失败,无法开始上传");
}
},
error:function(){
showImportFolderAlert("提示:生成新文件夹名称失败,无法开始上传");
}
});
}
// 迭代上传文件夹内的文件(直接上传)
function iteratorImport(i,newFolderName){
$("#importpros").width("0%");// 先将进度条置0
$("#importpros").attr('aria-valuenow',"0");
var uploadfile = ifs[i];// 获取要上传的文件
var fcount = ifs.length;
var fc=$("#folderpath").attr("folderConstraintLevel");// 文件夹访问级别
if (uploadfile != null) {
var fname = uploadfile.webkitRelativePath;
if (fcount > 1) {
$("#importcount").text("" + (i+1) + "/" + fcount + "");// 显示当前进度
}
$("#importstatus").prepend(
"<p>" + fname + "<span id='ils_" + i
+ "'>[正在上传...]</span></p>");
xhr = new XMLHttpRequest();// 这东西类似于servlet里面的request
var fd = new FormData();// 用于封装文件数据的对象
fd.append("file", uploadfile);// 将文件对象添加到FormData对象中字段名为uploadfile
fd.append("folderId", locationpath);
fd.append("folderConstraint",fc);
if(!!newFolderName){
fd.append("newFolderName",newFolderName);
}
xhr.open("POST", "homeController/doImportFolder.ajax", true);// 上传目标
xhr.upload.addEventListener("progress", importProgress, false);// 这个是对上传进度的监听
// 上面的三个参数分别是事件名指定名称、回调函数、是否冒泡一般是false即可
xhr.send(fd);// 上传FormData对象
if(pingInt == null){
pingInt = setInterval("ping()",60000);// 上传中开始计时应答
}
// 上传结束后执行的回调函数
xhr.onloadend = function() {
// 停止应答计时
if(pingInt != null){
window.clearInterval(pingInt);
pingInt = null;
}
if (xhr.status === 200) {
// TODO 上传成功
var result = xhr.responseText;
if (result == "uploadsuccess") {
$("#ils_" + i).text("[已完成]");
var ni=i+1;
if(ni < fcount){
iteratorImport(ni,newFolderName);
}else{
// 完成全部上传后,清空所有提示信息,并还原上传窗口
isImporting=false;
$("#folderpath").removeAttr("disabled");
$("#importFolderLevelBtn").removeAttr("disabled");
$("#importfolder").val("");
$("#folderpath").val("");
$("#importpros").width("0%");
$("#importpros").attr('aria-valuenow',"0");
$("#importbutton").attr('disabled', false);
$("#importcount").text("");
$("#importstatus").text("");
$('#importFolderModal').modal('hide');
showFolderView(locationpath);
}
} else if (result == "uploaderror") {
showImportFolderAlert("提示:出现意外错误,文件:[" + fname
+ "]上传失败,上传被中断。");
$("#ils_" + i).text("[失败]");
} else {
showImportFolderAlert("提示:出现意外错误,文件:[" + fname
+ "]上传失败,上传被中断。");
$("#ils_" + i).text("[失败]");
}
} else {
showImportFolderAlert("提示:出现意外错误,文件:[" + fname + "]上传失败,上传被中断。");
$("#ils_" + i).text("[失败]");
}
};
} else {
showImportFolderAlert("提示:要上传的文件不存在。");
$("#importstatus").prepend(
"<p>未找到要上传的文件<span id='ils_" + i + "'>[失败]</span></p>");
}
}
// 取消文件夹上传
function abortImport(){
isImporting=false;
if (xhr != null) {
xhr.abort();
}
$('#importFolderModal').modal('hide');
showFolderView(locationpath);
}
// 修改上传文件夹约束等级
function changeImportFolderType(type){
$("#importfoldertype").text(folderTypes[type]);
$("#folderpath").attr("folderConstraintLevel",type+"");
}

File diff suppressed because one or more lines are too long

View File

@ -544,8 +544,12 @@ See https://github.com/adobe-type-tools/cmap-resources
var modal = document.getElementById('pdf-modal');
if (url.indexOf("getWordView") >= 0) {
document.getElementById('doc-type-box').innerHTML="Word";
}else{
}else if(url.indexOf("getTxtView") >= 0){
document.getElementById('doc-type-box').innerHTML="TXT";
}else if(url.indexOf("getPPTView") >= 0){
document.getElementById('doc-type-box').innerHTML="PPT";
}else{
document.getElementById('doc-type-box').innerHTML="未知类型";
}
modal.style.display = "block";
var interval = setInterval(function() {

View File

@ -1,10 +1,15 @@
kiftd 使用许可
Copyright (c) 2019 青阳龙野 <kohgylw@163.com> (phone:159****3814)
Copyright © 2019 青阳龙野 <kohgylw@163.com>
使用、分发或修改kiftd软件及源代码代表您接受如下条款
1任何组织或个人均能够自由、无偿地获得kiftd软件及其源代码的原版拷贝并对其享有无限制使用的权利——无论是商业的还是非商业的。
2任何组织或个人均能够自由复制、分发或修改kiftd软件及其源代码并将其运用于任何用途。修改后的作品之版权由修改者所有。
3kiftd软件之作者无需为使用该软件及其源代码所造成的任何直接或间接后果承担责任。
4作者“青阳龙野 kohgylwE-mail:kohgylw@163.com”对kiftd的原版java/网页页面源代码、原版java软件程序和页面资源、随发行版程序附带的原版《kiftd说明文档》均具备版权。
5kiftd软件中涉及的所有第三方软件、工具或插件及其代码其权利由该资源之作者享有并授予kiftd许可。kiftd作者无需为使用这些资源而造成的直接或间接后果承担责任。
使用、分发或修改kiftd及其程序的源代码均代表您接受如下条款
1任何组织或个人均能够自由、无偿地获得kiftd发行版及其源代码的原版拷贝并对其享有无限制使用的权利——无论是商业性的还是非商业性的。
2任何组织或个人均能够自由复制、分发或修改kiftd发行版及其源代码并将其用于任何用途。修改后的作品版权由修改者自身享有。
3kiftd的作者无需为使用该软件及其源代码所造成的任何直接或间接后果承担责任。
4kiftd的作者对kiftd中的全部java源代码、页面文件、js及css文件、jar程序、mybatisResource文件夹内的资源、README.md文件以及随发行版程序附带的原版《kiftd说明文档》享有版权并作为kiftd软件的版权人。
5kiftd软件中涉及的所有第三方软件、工具、图片、插件及其代码其权利由该资源之作者享有并授予kiftd使用许可。任何单位和个人认为kiftd包含的上述内容可能涉嫌侵犯其合法权益时应及时向kiftd作者进行书面反馈并提供其身份证明、权属证明及详细侵权情况的说明kiftd将会立即移除被控侵权的内容。
版权人信息:
地址河北省唐山市路北区兴源里玫瑰庄园6单元602号
电话15928143814此为个人电话如需对kiftd提出建议或获取支持请发送电子邮件
电子邮箱kohgylw@163.com