var lock_uploadenable = false; var upload_server = []; var upload_queue = []; var xhr_slot = []; var filecnt = 0; var filesize = 0; var timer_checkQueue = false; var upload_cancel = false; function uploadFile(_filedata, _callback) { if (!lock_uploadenable) return; if (_filedata.length <= 0) { return; } $('.area_fileupload').css("display", "none"); $('.area_waitupload').css("display", "block"); //進行中に追加 var append = false; if (upload_queue.length > 0) { append = true; } if (!append) { updateUploadStatus(0, "しばらくおまちください..."); } var now_filecnt = 0; var now_filesize = 0; for (var i=0; i<_filedata.length; i++) { if (!_filedata[i].name || _filedata[i].size <= 0) continue; now_filecnt ++; now_filesize += _filedata[i].size; } if (now_filecnt <= 0) { uploadClean(); return; } if (filecnt+now_filecnt > 300) { //ファイル数制限を超えている viewUploadError(false, "ファイル個数制限を超えています。同時に300個までのファイルを送信できます。"); uploadClean(); return; } if (filesize+now_filesize >= 1024*1024*102400) { //ファイル制限超えてる viewUploadError(false, "サイズ制限を超えています。合計100GB (100,000MB)までのファイルを送信できます。"); uploadClean(); return; } console.log("total filecnt="+filecnt+", filesize="+Math.round(filesize/(1024*1024))+"MB"); console.log("upload_queue: ", upload_queue); var postData = {}; postData.action = "getUploadServerMulti"; $.ajax({ url: "https://d.kuku.lu/index.php", type: 'POST', cache: false, data: postData }).done(function(data){ try { data = JSON.parse(data); } catch(e) { console.log(e); } if (data.result == "OK" && data.servers) { for (var i=0; i<_filedata.length; i++) { if (!_filedata[i].name || _filedata[i].size <= 0) continue; filecnt ++; filesize += _filedata[i].size; upload_queue[upload_queue.length] = { id: upload_queue.length, filedata: _filedata[i], status: "wait", loaded: 0, server: false, url: "", hash: "", callback: _callback }; } for (var i=0; i= upload_queue.length) { //checkQueueを止める if (timer_checkQueue) { clearInterval(timer_checkQueue); timer_checkQueue = false; } finishUploadQueue(); return; } //パラレル数が4未満なら新規アップロード開始 if (_now_upload_cnt < 4) { for (var n=0; n<(4-_now_upload_cnt); n++) { for (var i=0; i= 100) { updateUploadStatus(false, '登録処理中です。ファイル数や容量によっては時間がかかります...'); } else { var _speed_bps = 0; var _lefttime = ""; try { if (upload_start_time && filesize && _totalloaded) { _speed_bps = (_totalloaded/(((new Date().getTime()) - upload_start_time)/1024)); var _lefttime_sec = Math.ceil((filesize-_totalloaded) / _speed_bps); var _lefttime_min = Math.floor(_lefttime_sec / 60); _lefttime_sec -= _lefttime_min * 60; _lefttime = "(残り "; if (_lefttime_min) { _lefttime += ""+Math.ceil(_lefttime_min)+"分"; } _lefttime += ""+Math.ceil(_lefttime_sec)+"秒"; _lefttime += ")"; } } catch(e) { console.error(e); } updateUploadStatus(false, ""+viewBytes(_totalloaded)+" / "+viewBytes(filesize)+" - "+viewBytes(_speed_bps, "KB")+"/s - "+ percentComplete.toString() + "% 完了
"+_lefttime); } } function getUploadServer() { var _minuse = 999; var _target = 0; for (var i=0; i= 100) _percent = 100; $('.area_uploadprogress').css("width", ""+_percent+"%"); } if (typeof updateUploadStatusAlt == 'function') { updateUploadStatusAlt(_percent, _message); } } function viewUploadError(_code, _message) { if (upload_cancel) return; if (typeof viewUploadErrorAlt == 'function') { viewUploadErrorAlt(_code, _message); } else { if (_message) { alert(_message); } else { alert("ファイルの送信中にエラーが発生しました。もう一度お試しください。 ("+_code+")"); } } } function viewBytes(num, _format){ var _suff = "KB"; if (num >= 1024*1024 && (!_format || _format == "MB")) { //MB num = Math.round((num) / (1024*1024)); _suff = "MB"; } else { //KB num = Math.round((num) / 1024); _suff = "KB"; } return ""+(String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'))+" "+_suff; } $(function(){ $("#file_upload").change(function(){ uploadFile(document.getElementById('file_upload').files); }); $(".button_upload").click(function(){ var $elm = $('#file_upload'); if (document.createEvent) { $elm.show(); var e = document.createEvent('MouseEvents'); e.initEvent('click', true, true ); $elm.get(0).dispatchEvent(e); $elm.hide(); } else { $elm.show(); $elm.trigger("click"); $elm.hide(); } return false; }); $(".area_fileupload_drop").bind("dragover", function(e){ e.originalEvent.preventDefault(); return false; }); $(".area_fileupload_drop").bind("dropstart", function(e){ e.originalEvent.preventDefault(); e.originalEvent.stopPropagation(); return false; }); $(".area_fileupload_drop").bind("drop", function(e){ e.originalEvent.preventDefault(); e.originalEvent.stopPropagation(); console.log(e.type, e.target.id); console.log(e.originalEvent.dataTransfer.files); $(".area_fileupload_drop").css("display", "none"); $(".area_fileupload").css("display", "block"); uploadFile(e.originalEvent.dataTransfer.files); return false; }); var next_dragleave_cancel = false; $("body").bind("dragenter", function(e){ e.originalEvent.preventDefault(); console.log(e.type, e.target.id, e.originalEvent); if ($(e.target).closest(".area_fileupload").length > 0) { $(".area_fileupload_drop_here").css("height", $(".area_fileupload").height()); $(".area_fileupload").css("display", "none"); $(".area_fileupload_drop").css("display", "block"); } if ($(e.target).closest(".area_fileupload_fixed").length > 0) { $(".area_fileupload_drop").css("display", "block"); } if (!$(e.target).hasClass('area_fileupload_drop_here') && $(e.target).closest(".area_fileupload_drop_here").length > 0) { next_dragleave_cancel = true; } return false; }); $("body").bind("dragleave", function(e){ e.originalEvent.preventDefault(); console.log(e.type, e.target.id, e.originalEvent); console.log("next_dragleave_cancel: "+next_dragleave_cancel); if (next_dragleave_cancel) { next_dragleave_cancel = false; return false; } if ($(e.target).hasClass('area_fileupload_drop_here')) { $(".area_fileupload_drop").css("display", "none"); $(".area_fileupload").css("display", "block"); } return false; }); $(".area_fileupload_drop_here").bind("click", function(e) { $(".area_fileupload_drop").css("display", "none"); $(".area_fileupload").css("display", "block"); }); setTimeout(function(){ lock_uploadenable = true; }, 500); });