35557-vm/upload.php
Flatlogic Bot 1496e8cc1d 3
2025-11-07 22:57:22 +00:00

65 lines
2.3 KiB
PHP

<?php
header('Content-Type: application/json');
$response = ['success' => false, 'error' => 'An unknown error occurred.'];
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
if ($file['error'] !== UPLOAD_ERR_OK) {
$response['error'] = 'File upload error: ' . $file['error'];
} else {
$fileExt = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
$fileMime = mime_content_type($file['tmp_name']);
$targetDir = '';
$allowedTypes = [];
$maxSize = 0;
$prefix = '';
// Determine settings based on file type
if (strpos($fileMime, 'image/') === 0) {
$targetDir = 'assets/uploads/images/';
$allowedTypes = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
$maxSize = 5 * 1024 * 1024; // 5 MB
$prefix = 'img_';
} elseif (strpos($fileMime, 'video/') === 0) {
$targetDir = 'assets/uploads/videos/';
$allowedTypes = ['mp4', 'webm', 'mov', 'ogv'];
$maxSize = 50 * 1024 * 1024; // 50 MB
$prefix = 'vid_';
} else {
$response['error'] = 'Unsupported file type: ' . $fileMime;
}
if ($targetDir) {
if (!is_dir($targetDir)) {
mkdir($targetDir, 0775, true);
}
if (!in_array($fileExt, $allowedTypes)) {
$response['error'] = 'Invalid file extension. Allowed: ' . implode(', ', $allowedTypes);
} elseif ($file['size'] > $maxSize) {
$response['error'] = 'File is too large. Maximum size is ' . ($maxSize / 1024 / 1024) . ' MB.';
} else {
$fileName = preg_replace("/[^a-zA-Z0-9-_\.]/", "", basename($file['name']));
$uniqueName = $prefix . uniqid('', true) . '.' . $fileExt;
$targetPath = $targetDir . $uniqueName;
if (move_uploaded_file($file['tmp_name'], $targetPath)) {
$response = [
'success' => true,
'filePath' => $targetPath
];
} else {
$response['error'] = 'Failed to move uploaded file.';
}
}
}
}
} else {
$response['error'] = 'No file uploaded.';
}
echo json_encode($response);
?>