Files
awo-hamburg-intranet/mysyde/admin/video_uploud/video_uploud_server.php
2026-02-17 14:56:23 +01:00

113 lines
4.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// Настройки загрузки
$uploadDir = '../../../userdata/Videos/';
// Убедимся, что директория существует
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
// Получение параметров из запроса
$chunkIndex = isset($_POST['dzchunkindex']) ? (int)$_POST['dzchunkindex'] : 0;
$totalChunks = isset($_POST['dztotalchunkcount']) ? (int)$_POST['dztotalchunkcount'] : 1;
$fileName = isset($_POST['dzdestinationfile']) ? $_POST['dzdestinationfile'] : '';
$uuid = isset($_POST['dzuuid']) ? $_POST['dzuuid'] : '';
// Проверка входных данных
if (empty($fileName)) {
die(json_encode(['success' => false, 'message' => 'Имя файла не указано']));
}
// Создадим подпапку для временных чанков, чтобы избежать конфликтов
$tempDir = $uploadDir . 'temp_' . $uuid . '/';
if (!is_dir($tempDir)) {
mkdir($tempDir, 0755, true);
}
// Путь к временному файлу
$tempFilePath = $tempDir . $chunkIndex;
// Проверка загружаемого файла
if (!isset($_FILES['file']) || $_FILES['file']['error'] != UPLOAD_ERR_OK) {
die(json_encode([
'success' => false,
'message' => 'Ошибка загрузки файла: ' .
(isset($_FILES['file']) ? $_FILES['file']['error'] : 'Файл не был отправлен')
]));
}
// Сохраняем загруженный чанк
if (move_uploaded_file($_FILES['file']['tmp_name'], $tempFilePath)) {
// Проверяем, все ли чанки загружены
$allChunksUploaded = true;
for ($i = 0; $i < $totalChunks; $i++) {
if (!file_exists($tempDir . $i)) {
$allChunksUploaded = false;
break;
}
}
// Если загружены все части, объединяем их
if ($allChunksUploaded) {
$finalFilePath = $uploadDir . $fileName;
$finalFile = fopen($finalFilePath, 'wb');
if (!$finalFile) {
die(json_encode([
'success' => false,
'message' => 'Не удалось создать итоговый файл'
]));
}
// Объединяем все куски в один
for ($i = 0; $i < $totalChunks; $i++) {
$chunkPath = $tempDir . $i;
$chunkFile = fopen($chunkPath, 'rb');
if (!$chunkFile) {
fclose($finalFile);
die(json_encode([
'success' => false,
'message' => 'Не удалось открыть чанк ' . $i
]));
}
// Потоковое копирование для экономии памяти
while (!feof($chunkFile)) {
fwrite($finalFile, fread($chunkFile, 8192)); // Чтение и запись блоками по 8KB
}
fclose($chunkFile);
unlink($chunkPath); // Удаляем временный кусок
}
fclose($finalFile);
// Удаляем временную директорию
rmdir($tempDir);
// Возвращаем успешный результат
echo json_encode([
'success' => true,
'message' => 'Файл успешно загружен',
'file' => $fileName,
'path' => $finalFilePath
]);
} else {
// Не все чанки загружены, сообщаем о частичной загрузке
echo json_encode([
'success' => true,
'message' => 'Часть ' . ($chunkIndex + 1) . ' из ' . $totalChunks . ' успешно загружена'
]);
}
} else {
echo json_encode([
'success' => false,
'message' => 'Ошибка при сохранении файла'
]);
}
?>