javascriptで処理の一時待機(停止)を行いたい。
○処理の内容:
複数ファイルを選択後、各ファイルを500MBサイズに分割して送信。
送信先PHPで保存・結合
javascript
1files = $('#upfile')[0].files; 2 3var sliceSize = 536870912; 4var up_max = files.length; 5 6for (var i=0; i<up_max; i++){ 7 var sliceCnt = 0; 8 if (files[i]["size"] <= sliceSize){ 9 sliceCnt = 1; 10 }else{ 11 sliceCnt = Math.ceil(files[i]["size"] / sliceSize); 12 } 13 for (var j=0; j<sliceCnt; j++){ 14 fileSlice(files[i], files[i]["name"], j, sliceCnt, sliceSize); 15 } 16} 17function fileSlice(file, fileName, i, sliceCnt, sliceSize){ 18 var start = 0, 19 stop = 0; 20 21 start = i * sliceSize; 22 stop = start + sliceSize; 23 24 var reader = new FileReader(); 25 reader.onload = function(evt){ 26 const data = evt.target.result; 27 reader.abort(); 28 }; 29 var blob = file.slice(start, stop); 30 reader.readAsArrayBuffer(blob); 31 $('#progress_wrapper').empty(); 32 $('#progress_wrapper').html('<progress id="progress_area" class="progress_area" value="0" max="100">0%</progress><span id="progress_count" class="progress_count"></span>'); 33 34 upload(blob, fileName, i, sliceCnt-1); 35 sfcFlg = 0; 36} 37function upload(blob, fileName, id, maxId){ 38 $.ajax("upload_test.php",{ 39 xhr: function(){ 40 XHR = $.ajaxSettings.xhr(); 41 if (XHR.upload){ 42 XHR.upload.addEventListener('progress', function(e){ 43 var progre = parseInt(e.loaded / e.total * 10000) / 100; 44 $('#progress_area').val(progre); 45 $('#progress_area').html(progre + '%'); 46 $('#progress_count').html(Math.round(progre) + '%'); 47 }, false); 48 } 49 return XHR; 50 }, 51 type: 'POST', 52 data: blob, 53 cache: false, 54 processData: false, 55 contentType: 'application/octet-stream', 56 dataType: 'jsonp', 57 jsonpCallback: 'callback', 58 headers: { 59 "File-Name": fileName, 60 "Chunk-Id": id, 61 "Chunk-Max-Id": maxId 62 }, 63 success: function(data){ 64 },error: function(data){ 65 } 66 }); 67}
各ファイル毎のアップロード進捗を表示させたいのですが、for文で回しているため
一気に全送信が終了します。
各分割ファイルの送信が完了するまで、処理を待機させる方法を探しています。
どなたか解決方法をお教えください、よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。