Files
base-image-test/public/image/upload.php
T
2026-08-04 11:34:01 +07:00

80 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
header('Content-Type: application/json');
$uploadDir = __DIR__ . '/../../storage/uploads';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode([
'success' => false,
'message' => 'Method Not Allowed'
]);
exit;
}
if (!isset($_FILES['image'])) {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'image field required'
]);
exit;
}
$file = $_FILES['image'];
if ($file['error'] !== UPLOAD_ERR_OK) {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Upload failed',
'error' => $file['error']
]);
exit;
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($file['tmp_name']);
$allowed = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/webp' => 'webp',
];
if (!isset($allowed[$mime])) {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Invalid image type'
]);
exit;
}
$filename = bin2hex(random_bytes(16)) . '.' . $allowed[$mime];
$destination = $uploadDir . '/' . $filename;
if (!move_uploaded_file($file['tmp_name'], $destination)) {
http_response_code(500);
echo json_encode([
'success' => false,
'message' => 'Cannot save file'
]);
exit;
}
echo json_encode([
'success' => true,
'filename' => $filename,
'url' => '/uploads/' . $filename,
'size' => filesize($destination),
'mime' => $mime,
]);