/** * Created by nozmu on 2017/10/20. */ /* 1. 対象の divにclass="drop_target" を設定 2. すぐしたのuploadURLに アップロード用PHPファイルを設定 3. 画像表示のURL(ディレクトリまでを設定) (例)
data-moto : 元ファイルの保存先 ,Divの幅, Divの幅 data-thum? : サムネイルの保存先、幅、高さ  ※ ?は連番 data-val : ファイル名 data-showkbn : 0:input状態 1:表示のみ  ※アップロード後は、1番目のサムネイルを表示します */ //アップロード用Ajaxファイル var uploadURL = "https://h-cloud.jp/manager/dashboard/image_upload/ajax_file_upload.php"; //Upload URL var photoURL = "https://h-cloud.jp//image/"; var in_upload_lock = 0; /* アップロード処理 */ function sendFileToServer(formData, status ,obj) { var extraData = {}; //Extra Data. var jqXHR = $.ajax({ xhr: function () { var xhrobj = $.ajaxSettings.xhr(); if (xhrobj.upload) { xhrobj.upload.addEventListener('progress', function (event) { var percent = 0; var position = event.loaded || event.position; var total = event.total; if (event.lengthComputable) { percent = Math.ceil(position / total * 100); } //Set progress status.setProgress(percent); }, false); } return xhrobj; }, url: uploadURL, type: "POST", contentType: false, processData: false, cache: false, data: formData }).done(function (data) { status.setProgress(100); console.log(data); if ( data != '') { obj.data("val", data); drop_target_init(obj); } else { status.setError('アップロード中にエラーが発生しました'); } }).fail(function (data) { status.setError('アップロード中にエラーが発生しました'); }).always(function (data) { in_upload_lock = 0; }); } function setImageFile(obj,name){ obj.data("val",name); drop_target_init(obj); } /* ステータス表示 */ function createStatusbar(obj) { obj.html(''); this.filename = $("
").appendTo(obj); this.size = $("
").appendTo(obj); this.progressBar = $("
").appendTo(obj); this.error = $("
").appendTo(obj); this.setFileNameSize = function (name, size) { var sizeStr = ""; var sizeKB = size / 1024; if (parseInt(sizeKB) > 1024) { var sizeMB = sizeKB / 1024; sizeStr = sizeMB.toFixed(2) + " MB"; } else { sizeStr = sizeKB.toFixed(2) + " KB"; } this.filename.html(name); this.size.html(sizeStr); } this.setProgress = function (progress) { this.progressBar.find('div').html(progress + "% "); } this.setError = function (msg) { this.error.find('div').html(msg); } } /* アップロード メイン処理 */ function handleFileUpload(files, obj) { for (var i = 0; i < files.length; i++) { //フォーム作成 var fd = new FormData(); fd.append('file' , files[i]); fd.append('moto' ,obj.data('moto')); var j = 1; while( obj.data('thum'+j) !== undefined ) { fd.append('thum'+j,obj.data('thum'+j)); j++; } var status = new createStatusbar(obj); status.setFileNameSize(files[i].name, files[i].size); sendFileToServer(fd, status ,obj); } } /* ドロップターゲットの初期化 */ function drop_target_init(obj){ var show_kbn = obj.data('showkbn'); var max_size = obj.data('maxsize'); $('#input_'+obj.attr('id')).val(obj.data("val")); //表示設定 if ( obj.data('val') != "" ){ var name = obj.data('val'); var ext = getExt(name); ext = ext.toLowerCase(); var arr_moto = obj.data('moto').split(','); obj.css('width',arr_moto[1]); obj.css('height','auto'); if (ext == "jpeg" || ext == "jpg" || ext == "png" || ext == "gif" ) { obj.html(''); } else { obj.html(''); } if ( show_kbn == "0" ) { obj.append('
削除
'); $(".filedd_close").off(); $(".filedd_close").on("click",function(){ var obj = $(this).parent(); obj.data('val',""); drop_target_init(obj); }); } } else { //表示サイズ設定 var arr_moto = obj.data('moto').split(','); obj.css('width',arr_moto[1]); obj.css('height',arr_moto[2]); if ( show_kbn == "0" ) { var sizeStr = ""; var sizeKB = max_size / 1024; if (parseInt(sizeKB) > 1024) { var sizeMB = sizeKB / 1024; sizeStr = sizeMB + " MB"; } else { sizeStr = sizeKB + " KB"; } //obj.html('
動画・画像ファイルをドロップ
ファイル形式:jpg/png/gif/wmv/mp4/mpg/mov/m4v
最大サイズ:'+sizeStr+'
'); obj.html('
画像ファイルをドロップ
ファイル形式:jpg/png/gif
最大サイズ:'+sizeStr+'
'); obj.append(''); set_btn_event(obj); } else { obj.html('
未選択
'); } } $('#show_obj').on('load', function() { var vh = $('#show_obj').height(); $('#show_obj').parent().height(vh); console.log(vh + 'px'); }); $('#show_obj_v').on('progress', function() { var vh = $('#show_obj_v').height(); $('#show_obj_v').parent().height(vh); console.log(vh + 'px(progress)'); }); } /* イベント処理 */ $(document).ready(function () { //ドロップ対象へイベント追加 $(".drop_target").each(function () { var show_kbn = $(this).data('showkbn'); var max_size = $(this).data('maxsize'); //IDを隠し項目の名前に設定 $(this).after(''); //表示設定 drop_target_init($(this)); //イベント設定 if ( show_kbn == "0" ) { $(this).on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); $(this).css('border', '3px solid #0B85A1'); }); $(this).on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); }); /* ドロップ イベント */ $(this).on('drop', function (e) { //ロック if ( in_upload_lock == 1){ alert('他のアップロード中です、アップロード完了後に実行してください'); return; } in_upload_lock = 1; //罫線 $(this).css('border', '1px dotted #0B85A1'); //デフォルトイベントなし e.preventDefault(); //ファイル取得 var files = e.originalEvent.dataTransfer.files; //入力チェック if (files.length > 1){ $(this).html('
複数のファイルが選択されています
1つのファイルのみドロップしてください
'); $(this).append(''); set_btn_event($(this)); in_upload_lock = 0; return; } var ext = getExt(files[0].name); ext = ext.toLowerCase(); //if (ext !== "jpeg" && ext !== "jpg" && ext !== "png" && ext !== "gif" && ext !== "wmv" && ext !== "mp4" && ext !== "mpg" && ext !== "mov" && ext !== "m4v"){ if (ext !== "jpeg" && ext !== "jpg" && ext !== "png" && ext !== "gif" ){ $(this).html('
未対応の形式のファイルです
対応形式:jpg/png/gif
'); $(this).append(''); set_btn_event($(this)); in_upload_lock = 0; return; } var max_size = $(this).data('maxsize'); if (isNaN(max_size)){ max_size = 0; } if (files[0].size > max_size ){ $(this).html(''); var sizeStr = ""; var sizeKB = max_size / 1024; if (parseInt(sizeKB) > 1024) { var sizeMB = sizeKB / 1024; sizeStr = sizeMB + " MB"; } else { sizeStr = sizeKB + " KB"; } $(this).html('
ファイルサイズが大きすぎます
最大サイズ:'+sizeStr+'
'); $(this).append(''); set_btn_event($(this)); in_upload_lock = 0; return; } //処理実行 handleFileUpload(files, $(this)); }); } }); //ブラウザ自体のイベントを解除 $(document).on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); }); $(document).on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); }); $(document).on('drop', function (e) { e.stopPropagation(); e.preventDefault(); }); //サブミット時 $("form").submit(function() { if ( in_upload_lock == 1) { alert('ファイルのアップロード中です、アップロード完了後に実行してください'); return false; } }); }); /* 拡張子の取得 */ function getExt(filename){ /* var reg=/(.*)(?:\.([^.]+$))/; return filename.match(reg)[2]; */ var arr_filename = filename.split('.'); console.log(arr_filename); return arr_filename[arr_filename.length -1 ]; } /* ファイル選択ボタン イベント設定 */ function set_btn_event(obj){ $('.upload_file_select_btn').off('click'); $('.upload_file_select').off('change'); $('.upload_file_select_btn').on('click', function () { if($('.filedd_error').length){ $('.filedd_error').remove(); } $(this).prev().click(); return false; }); $('.upload_file_select').on('change', function(e) { //ロック if ( in_upload_lock == 1){ alert('他のアップロード中です、アップロード完了後に実行してください'); return; } in_upload_lock = 1; //デフォルトイベントなし e.preventDefault(); //ファイル取得 var files = $(this).prop('files'); //入力チェック if (files.length > 1){ $(this).parent().append('
複数のファイルが選択されています
'); in_upload_lock = 0; return; } var ext = getExt(files[0].name); ext = ext.toLowerCase(); //if (ext !== "jpeg" && ext !== "jpg" && ext !== "png" && ext !== "gif" && ext !== "wmv" && ext !== "mp4" && ext !== "mpg" && ext !== "mov" && ext !== "m4v"){ if (ext !== "jpeg" && ext !== "jpg" && ext !== "png" && ext !== "gif" ){ $(this).parent().append('
未対応の形式のファイルです
'); in_upload_lock = 0; return; } var max_size = $(this).parent().data('maxsize'); if (isNaN(max_size)){ max_size = 0; } if (files[0].size > max_size ){ $(this).parent().html(''); var sizeStr = ""; var sizeKB = max_size / 1024; if (parseInt(sizeKB) > 1024) { var sizeMB = sizeKB / 1024; sizeStr = sizeMB + " MB"; } else { sizeStr = sizeKB + " KB"; } $(this).parent().append('
ファイルサイズが大きすぎます
'); in_upload_lock = 0; return; } //処理実行 handleFileUpload(files, $(this).parent()); }); }