blackseabreathe
@blackseabreathe
brackets

Как отследить прогресс загрузки файла php?

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();
}

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

  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Достаточно жс и гугла.
https://www.google.com/search?q=jquery+ajax+progre...
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Попробуй так:
$.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 + ' байт');
		}
	}
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы