S
S
Sergey Miller2022-03-26 15:46:41
PHP
Sergey Miller, 2022-03-26 15:46:41

How to track the progress of a php file upload?

session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_

html

spoiler
<?
session_start();
?>

<form enctype="multipart/form-data" method="post" id="uploadVideo">

<input type="hidden" id="progress" name="<?=ini_get("session.upload_progress.name"); ?>" value="123">

<input type="file" name="video[]" accept="video/avi, video/mp4, video/flv, video/mov, video/mkv, video/ogg, video/wmv, video/webm, video/ogv">

<button type="button" name="send" class="uploadVideoBtn">Загрузить</button>
</form>


ajax
spoiler
Отправка данных на проверку php

$.ajax({
url: url
type: 'post',
dataType: 'json',
data: formData,
async: true,
cache: false,
contentType: false,
processData: false,
success: function(json){
if(typeof json.success !== 'undefined'){
$.jGrowl(json.success);
} else if(typeof json.error !== 'undefined'){
$.jGrowl(json.error);
}
},
error: function(json, jqXHR, status, errorThrown, exception){
alert(JSON.stringify(json));
return $.jGrowl('ОШИБКА AJAX запроса: ' + status, jqXHR, json);
}
});

getting_progress();

Второй ajax на php файл, проверяющий сессию

function getting_progress(){
var interval_id = setInterval(function () {
$.ajax({
url: url2,
type: "POST",
dataType: 'json',
async: true,
success: function(json){
if(typeof json.success !== 'undefined'){
$.jGrowl(json.success);
clearInterval(interval_id);
} else if(typeof json.error !== 'undefined'){
$.jGrowl(json.error);
}
},
error: function(json, jqXHR, status, errorThrown, exception){
alert(JSON.stringify(json));
return $.jGrowl('ОШИБКА AJAX запроса: ' + status, jqXHR, json);
}
});
}, 500);
}


php
spoiler

// обработка файла

session_start();


if(!isset($_FILES['video']) || empty($_FILES['video'])){
echo json_encode(['error' => 'Не выбрано видео для загрузки'], JSON_UNESCAPED_UNICODE);
exit();
}

.......

echo json_encode(['success' => "Видео [$fileHumanName] загружено"],  JSON_UNESCAPED_UNICODE);

// второй php файл, проверяющий сессию

session_start();



$key = ini_get("session.upload_progress.prefix") . '123';

if(isset($_SESSION[$key])){
echo json_encode(['error' => 'session exists'], JSON_UNESCAPED_UNICODE);
exit();
}
else{
echo json_encode(['error' => 'session does not exist'], JSON_UNESCAPED_UNICODE);
exit();
}

// всегда получаю ответ что такой ключ в сессии не существует

Answer the question

In order to leave comments, you need to log in

2 answer(s)
T
ThunderCat, 2022-03-26
@ThunderCat

Enough zhs and google.
https://www.google.com/search?q=jquery+ajax+progre...

N
Nadim Zakirov, 2022-03-26
@zkrvndm

Try like this:

$.ajax({
  url: url,
  type: 'POST',
  dataType: 'JSON',
  data: formData,
  async: true,
  cache: false,
  contentType: false,
  processData: false,
  success: function(json){
    if(typeof json.success !== 'undefined'){
      $.jGrowl(json.success);
    } else if(typeof json.error !== 'undefined'){
      $.jGrowl(json.error);
    }
  },
  error: function(json, jqXHR, status, errorThrown, exception){
    alert(JSON.stringify(json));
    return $.jGrowl('ОШИБКА AJAX запроса: ' + status, jqXHR, json);
  },
  xhrFields: {
    onprogress: function(event) {
      console.log('Загружено на сервер ' + event.loaded + ' байт');
    }
  }
});

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question