fetch太慢去除历史提交记录

This commit is contained in:
gedoor
2022-01-03 23:59:44 +08:00
commit 51c16a1efc
1294 changed files with 194322 additions and 0 deletions
@@ -0,0 +1,236 @@
/**
* 公共函数
*/
//全局的配置文件
var config = {
fileTypes: "txt|epub|umd", //允许上传的文件格式 "txt|epub" // |doc|docx|wps|xls|xlsx|et|ppt|pptx|dps
//url : "http://"+location.host+"?action=addBook",//"http://localhost/t/post.php",//
url: "../addLocalBook",
fileLimitSize: 500 * 1024 * 1024,
};
var file = {
inQueue: [], //已经在队列里面的文件,包括 HTML5上传和 Flash上传的
clientHaveFiles: [], // 客户端已经存在的文件列表
};
/**
* HTML5 和 flash 公用,所有文件对象集合
* @var array
*/
var filesUpload = []; //
//统计文件大小
function countFileSize(fileSize) {
var KB = 1024;
var MB = 1024 * 1024;
if (KB >= fileSize) {
return fileSize + "B";
} else if (MB >= fileSize) {
return (fileSize / KB).toFixed(2) + "KB";
} else {
return (fileSize / MB).toFixed(2) + "MB";
}
}
//如果文件太长进行截取
function substr_string(name) {
var maxLen = 15;
var len = name.length;
if (len < 17) return name;
var lastIndex = name.lastIndexOf(".");
var suffix = name.substr(lastIndex);
var pre = name.substr(0, lastIndex);
var preLen = pre.length;
var preStart = preLen - 10;
//前面10个 + 后面5个
var fileName =
pre.substr(0, 10) +
"...." +
pre.substr(preStart > 4 ? -4 : -preStart, 4) +
suffix;
return fileName;
}
function checkFile(file) {
if (file.size > config.fileLimitSize) {
return jsonLang.t11;
}
if (
!file.name ||
!file.name.toLowerCase().match("(" + config.fileTypes + ")$")
) {
return jsonLang.t12;
}
var len = filesUpload.length;
for (var i = 0; i < len; i++) {
if (filesUpload[i].name == file.name) {
return jsonLang.t13;
}
}
return null;
}
/**
* 添加文件时,回调的函数
* @param object file 文件对象
* @param int type 0 是swf 上传的,1 是html5上传的
*/
function fileQueued(file, type) {
var size = 0,
fid = file.id,
name = "";
type = type || 0;
if (file != undefined) {
//计算文件大小 单位MB
size = countFileSize(file.size);
name = substr_string(file.name);
//创建要插入的元素
var li = document.createElement("li");
li.id = `tr_${fid}`;
li.innerHTML = `<dl class="grybg">
<dt>${name}</dt>
<dd>${size}</dd>
<dd id="handle_button_${fid}" onclick=userCancelUpload("${fid}",${type}) class="orange">
<span id="progress_bar_span_${fid}">0%</span> ${jsonLang.t9}
</dd>
</dl>
<div class="jdt"><p id="progress_bar_p_${fid}" ></p></div>`;
var table = document.getElementById("tableStyle");
table.appendChild(li);
//保存falsh_id,为上传做准备
//global_flash_id.push(file.id);
//更改背景颜色
changeTrBackGroundColor();
}
}
function changeTrBackGroundColor() {
var getTr = document.getElementById("tableStyle").getElementsByTagName("dl");
trNum = getTr.length;
for (var i = 0; i < trNum; i++) {
if (i % 2 == 0) {
getTr[i].style.backgroundColor = "#f3f3f3";
}
}
}
//上传时返回的状态
function uploadProgress(file, bytesLoaded, bytesTotal) {
var progressClass = document.getElementById(
"progress_bar_p_" + file.id
).classList;
if (!progressClass.contains("orange")) {
progressClass.add("orange");
}
document.getElementById("progress_bar_p_" + file.id).style.width =
(bytesLoaded / bytesTotal) * 100 + "%";
document.getElementById("progress_bar_span_" + file.id).innerHTML =
parseInt((bytesLoaded / bytesTotal) * 100) + "%";
}
//上传成功
function uploadSuccess(file, serverData, res) {
var id = "handle_button_" + file.id;
var dd = document.createElement("dd");
dd.innerHTML = jsonLang.t10;
document.getElementById(id).replaceWith(dd);
}
//取消上传
function userCancelUpload(file_id, type) {
if (type == 0) {
SWFFuns.cancelUpload(file_id);
} else {
HTML5Funs.cancelUpload(file_id);
}
var element = document.getElementById("handle_button_" + file_id);
element.innerHTML = jsonLang.t14;
element.classList.remove("orange");
element.classList.add("gray");
//如果已经上传一部分了
var progressElement = document.getElementById("progress_bar_p_" + file_id);
if (progressElement.classList.contains("orange")) {
progressElement.classList.remove("orange");
progressElement.classList.add("gray");
}
}
/**
* 通过文件名称 从全局的文件列表中获取文件对象
*
*/
function getFileFomeFilesUpload(filename) {
var len = filesUpload.length;
for (var i = 0; i < len; i++) {
if (filesUpload[i].name == filename) {
return filesUpload[i];
}
}
return null;
}
/**
* 往全局的 上传列表添加一个数据
*/
function addFileToFilesUpload(file) {
if (typeof file == "string") {
filesUpload.push({ name: file });
return true;
} else if (typeof file == "object") {
filesUpload.push(file);
return true;
}
return false;
}
/**
* 往全局的 上传列表添加一个数据
*/
function updateFileToFilesUpload(file) {
var len = filesUpload.length;
for (var i = 0; i < len; i++) {
if (filesUpload[i].name == file.name) {
filesUpload[i] = file;
return true;
}
}
return false;
}
/**
* 查找在数组中的位置
*/
function findObjectKey(object, fid) {
var len = object.length;
for (var i = 0; i < len; i++) {
if (object[i].id == fid) {
return i;
}
}
return -1;
}
/**
* 从全局的文件集合中移除文件,一般上传失败时使用
* @param array files 文件对象集合 [{},{},{}]
* @param int fid 要删除的文件id
* @return 删除后的数组, 其实数组是引用类型可以不返回
*/
function removeFileFromFilesUpload(files, fid) {
var filesUploadKey = -1;
filesUploadKey = findObjectKey(files, fid);
//从全局文件中移除
if (filesUploadKey > -1) files.splice(filesUploadKey, 1);
return files;
}
@@ -0,0 +1,241 @@
/**
* 处理拖拽上传
*/
var isDragOver = false; //拖拽触发点
var fileNumber = -1; //上传文件编号
var fileNumberPex = "zyFileUpload_"; //编号前缀
var currUploadfile = {}; //当前上传的文件对象
var uploadQueue = []; //上传队列集合
var isUploading = false; //是否正在上传
var XHR;
try {
XHR = new XMLHttpRequest();
} catch (e) {}
(function (isSupportFileUpload) {
//不支持拖拽上传,或者 不支持FormData ,显示WiFi表示
if (!isSupportFileUpload) {
document.getElementById("drag_area").classList.add("wf_wifi");
document.getElementById("drag_area").innerHTML = "";
return;
//更换样式
} else {
document.getElementById("drag_area").classList.add("wf_normal");
}
addEvent();
/**
* 添加事件
*/
function addEvent() {
var dropArea = document.getElementById("drag_area");
dropArea.addEventListener("dragover", handleDragOver, false);
dropArea.addEventListener("dragleave", handleDragLeave, false);
dropArea.addEventListener("drop", handleDrop, false);
}
/**
* 松开拖拽文件的处理,进行上传
*/
function handleDrop(evt) {
evt.stopPropagation();
evt.preventDefault();
var classList = document.getElementById("drag_area").classList;
classList.add("wf_normal");
classList.remove("wf_active");
console.log("Drop");
isDragOver = false;
var file = {};
var errorMsgs = [];
var len = evt.dataTransfer.files.length;
for (var i = 0; i < len; i++) {
fileNumber++;
file = evt.dataTransfer.files[i];
file.id = fileNumberPex + fileNumber;
//检测文件
msg = checkFile(file);
//文件可以通过
if (!msg) {
//添加全局
filesUpload.push(file);
//添加上传队列
uploadQueue.push(file);
//在页面进行展示
fileQueued(file, 1);
} else {
errorMsgs.push(msg);
}
}
if (errorMsgs.length > 0) {
//只选择做一个进行上传
if (len == 1) {
alert(errorMsgs[0]);
} else {
a1 = len;
a2 = len - errorMsgs.length;
var replaceArr = new Array(a1, a2);
alert(stringReplace(jsonLang.t7, replaceArr));
}
}
//拿出第一个,进行上传
if (!isUploading && uploadQueue.length > 0)
uploadFiles(uploadQueue.shift());
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
//防止多次DOM操作
if (!isDragOver) {
console.log("Over");
var classList = document.getElementById("drag_area").classList;
classList.add("wf_active");
classList.remove("wf_normal");
isDragOver = true;
}
}
function handleDragLeave(evt) {
console.log("DragLeave");
evt.stopPropagation();
evt.preventDefault();
isDragOver = false;
var classList = document.getElementById("drag_area").classList;
classList.add("wf_normal");
classList.remove("wf_active");
}
function uploadFiles(file) {
//正在上传
isUploading = true;
//设置上传的数据
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
var data = e.target.result;
var fd = new FormData();
fd.append("fileName", file.name);
fd.append("fileData", data);
//设置当前的上传对象
currUploadfile = file;
if (XHR.readyState > 0) {
XHR = new XMLHttpRequest();
}
XHR.upload.addEventListener("progress", progress, false);
XHR.upload.addEventListener("load", requestLoad, false);
XHR.upload.addEventListener("error", error, false);
XHR.upload.addEventListener("abort", abort, false);
XHR.upload.addEventListener("loadend", loadend, false);
XHR.upload.addEventListener("loadstart", loadstart, false);
XHR.open("POST", config.url);
XHR.send(fd);
XHR.onreadystatechange = function () {
//只要上传完成不管成功失败
if (XHR.readyState == 4) {
console.log("onreadystatechange ", XHR.status, +new Date());
if (XHR.status == 200) {
uploadSuccess(currUploadfile, {}, XHR.status);
} else {
uploadError();
}
//进行下一个上传
nextUpload();
}
};
};
}
//请求完成,无论失败或成功
function loadend(evt) {
console.log("loadend", +new Date(), evt);
}
//请求开始
function loadstart(evt) {
console.log("loadstart", evt);
}
//在请求发送或接收数据期间,在服务器指定的时间间隔触发。
function progress(evt) {
uploadProgress(currUploadfile, evt.loaded || evt.position, evt.total);
}
//在请求被取消时触发,例如,在调用 abort() 方法时。
function abort(evt) {
console.log("abort", evt);
}
//在请求失败时触发。
function error(evt) {
//终止ajax请求
XHR.abort();
uploadError();
nextUpload();
}
//在请求成功完成时触发。
function requestLoad(evt) {
console.log("requestLoad", +new Date(), evt);
}
//进行下一个上传
function nextUpload() {
isUploading = false;
if (uploadQueue.length > 0) {
uploadFiles(uploadQueue.shift());
} else {
//米有正在上传的了
currUploadfile = {};
}
}
//上传出错误了,比如断网,
function uploadError() {
//移除全局变量中的,上传出错的
removeFileFromFilesUpload(filesUpload, currUploadfile.id);
var file = currUploadfile;
var dd = document.createElement("dd")
dd.innerHTML = jsonLang.t8
document
.getElementById("handle_button_" + file.id)
.replaceWith(dd);
}
//对外部注册的函数
var HTML5Funs = {
/**
* 取消上传
* @param string fid 文件的Id
*/
cancelUpload: function (fid) {
var filesUploadKey = -1;
var uploadQueueKey = -1;
//从全局中删除文件
removeFileFromFilesUpload(filesUpload, fid);
//如果是正在上传的,AJAX取消
if (currUploadfile.id == fid) {
XHR.abort();
} else {
//从上传队列中移除
removeFileFromFilesUpload(uploadQueue, fid);
}
},
};
window.HTML5Funs = HTML5Funs;
})("FormData" in window && "ondrop" in document.body);
@@ -0,0 +1,111 @@
/**
* wifi传书功能,供客户端调用
* 切换语言环境 addby zhongweikang@zhangyue.com 2015/09/23
*/
var language; //当前语言
var jsonEn; //英文
var jsonZh; //中文
/**
* 语言包
*/
jsonEn = {
t0: "WiFi Upload",
t1: "Documents",
t2: "Name",
t3: "Size",
t4: "Operation",
t5: "Supported Format:TXT、EPUB、UMD",
t6: "Drag here and Drop to upload",
t7: "You choosed [txt] files ,we only can upload [txt] of them。\nPlease choose TXT、EPUB、UMD files, file name cannot be repeated.",
t8: "Failed",
t9: "Cancel",
t10: "Done",
t11: "One of books is over 500MB",
t12: "Bad file mode",
t13: "File already exists",
t14: "Canceled",
};
jsonZh = {
t0: "传书",
t1: "文档",
t2: "名字",
t3: "大小",
t4: "操作",
t5: "支持类型:TXT、EPUB、UMD",
t6: "拖至此处上传",
t7: "你选择了[txt]个文件,我们只能上传其中的[txt]。\n请选择 TXT、EPUB、UMD 类型的文件,文件的名字不能重复。",
t8: "失败",
t9: "取消",
t10: "完成",
t11: "上传文件不能大于500MB",
t12: "无效的文件格式",
t13: "文件已存在",
t14: "已取消",
};
if (navigator.language) {
language = navigator.language;
} else {
language = navigator.browserLanguage;
}
language = language.toLowerCase(language);
/**
* 切换语言
*/
function langSwich(s) {
switch (s) {
case "en-us":
_strReplace(jsonEn);
break;
case "zh-cn":
_strReplace(jsonZh);
break;
default:
_strReplace(jsonEn);
break;
}
}
function _strReplace(d) {
window.jsonLang = d; //全局变量在其他js文件中会遇到,勿删。
for (var i in jsonLang) {
var element = document.querySelector("[data-js=" + i + "]");
if (element) {
element.innerHTML = d[i];
}
}
}
/**
* 特殊字符串替换,例:语言包中的 t7
* content 替换前的文本
* replace 待插入的文本 (支持变量或数组)
*/
var isArray = function (obj) {
return Object.prototype.toString.call(obj) === "[object Array]";
};
function stringReplace(content, replace) {
var str = content;
if (!str) {
return null;
}
if (isArray(replace)) {
strs = str.split("[txt]");
count = strs.length - 1;
var string = "";
for (var i = 0; i < count; i++) {
string = string + strs[i] + replace[i];
}
string = string + strs[count];
} else {
string = str.replace(replace, "[txt]");
}
return string;
}
//执行
langSwich(language);
@@ -0,0 +1,184 @@
/**
* swf 上传
*/
var swfu;//swfupload 对象
var swfSelectCount = 0;// 当前选中的文件数量
window.onload = function () {
var settings = {
upload_url: config.url,
/*post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"},*/
file_size_limit: config.fileLimitSize + " B",
file_types: "*." + config.fileTypes.split("|").join(";*."),
file_types_description: "All Files",
file_upload_limit: 1000, //配置上传个数
file_queue_limit: 0,
custom_settings: {
progressTarget: "fsUploadProgress",
cancelButtonId: "btnCancel"
},
debug: 0,
button_cursor: SWFUpload.CURSOR.HAND,
button_image_url: "i/wifi_btn_b.png",
button_width: "240",
button_height: "100",
button_float: "right",
button_placeholder_id: "spanButtonPlaceHolder",
button_text: '<span class="theFont"></span>',
assume_success_timeout: 30,
file_queued_handler: swfFileQueued,
file_queue_error_handler: fileQueueError,
file_dialog_complete_handler: fileDialogComplete,
upload_start_handler: uploadStart,
upload_progress_handler: uploadProgress,
upload_error_handler: uploadError,
upload_success_handler: uploadSuccess,
upload_complete_handler: uploadComplete,
queue_complete_handler: queueComplete
};
swfu = new SWFUpload(settings);
};
//上传完成
function uploadComplete(file, server, response) {
//继续下一个文件的上传
this.startUpload();
}
//完成队列里的上传
function queueComplete(numFilesUploaded) {
}
function userStartUpload(file_id) {
swfu.startUpload(file_id);
}
function fileQueueError(file, errorCode, message) {
switch (errorCode) {
case -100:
//alert("Over 100 books");
case -110:
//alert("One of books is over 500MB");
break;
case -120:
//alert("One of books is 0KB");
break;
}
}
//入列完毕
function fileDialogComplete(numFilesSelected, numFilesQueued) {
if (numFilesSelected > 0) {
this.startUpload()
}
}
//开始上传
function uploadStart(file) {
return true;
}
//上传出错
function uploadError(file, errorCode, message) {
switch (errorCode) {
case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
errorMessage = "Error";
break;
case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
errorMessage = "Failed";
break;
case SWFUpload.UPLOAD_ERROR.IO_ERROR:
errorMessage = "Please open wifi upload page";
break;
case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
errorMessage = "Security error";
break;
case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
errorMessage = "Security error";
break;
case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
errorMessage = "Unable to verify. Skip ";
break;
default:
errorMessage = "Unhandled error";
break;
}
//从上传队列中移除
removeFileFromFilesUpload(filesUpload, file.id)
errorMessage = jsonLang.t8;
var dd = document.createElement("dd")
dd.innerHTML = errorMessage
document.getElementById("handle_button_" + file.id).replaceWith(dd)
}
var tmp = 0;
var errorFile = 0;
var errorMsgs = [];
function swfFileQueued(file) {
//本次上传选中的文件个数
if (swfSelectCount == 0) swfSelectCount = this.getStats().files_queued
//检测文件
msg = checkFile(file)
//文件可以通过
if (!msg) {
//添加全局的队列
filesUpload.push(file);
//在页面进行展示
fileQueued(file, 0)
} else {
//从上传队列移除,验证失败的文件
this.cancelUpload(file.id, false)
errorMsgs.push(msg)
}
//队列选择完毕,初始化所有的数据
if (++tmp == swfSelectCount) {
if (errorMsgs.length > 0) {
//只选择做一个进行上传
if (swfSelectCount == 1) {
alert(errorMsgs[0]);
} else {
a1 = swfSelectCount;
a2 = swfSelectCount - errorMsgs.length;
var replaceArr = new Array(a1, a2);
alert(stringReplace(jsonLang.t7, replaceArr));
}
}
tmp = 0;
errorFile = 0;
swfSelectCount = 0;
errorMsgs = []
}
}
var SWFFuns = {
cancelUpload: function (fid) {
swfu.cancelUpload(fid, false);
}
}
File diff suppressed because one or more lines are too long