-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupload.php
More file actions
119 lines (101 loc) · 3.43 KB
/
upload.php
File metadata and controls
119 lines (101 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
/**
* Upload-Handler
* Dateipfad: /image-compressor/upload.php
*
* Verarbeitet den asynchronen Upload von Bilddateien
*/
session_start();
require_once 'config/config.php';
require_once 'config/lang_config.php';
// Setze JSON-Header
header('Content-Type: application/json');
// Prüfe Request-Methode
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => __('errors.methodNotAllowed')]);
exit;
}
// Initialisiere Session-Arrays falls nicht vorhanden
if (!isset($_SESSION['uploaded_files'])) {
$_SESSION['uploaded_files'] = [];
}
// Neue Session-ID für diese Upload-Gruppe
if (!isset($_SESSION['upload_session_id'])) {
$_SESSION['upload_session_id'] = uniqid('session_', true);
// Bereinige alte Dateien aus vorherigen Sessions
cleanupOldFiles();
}
// Prüfe ob Dateien hochgeladen wurden
if (!isset($_FILES['file']) || $_FILES['file']['error'] !== UPLOAD_ERR_OK) {
http_response_code(400);
echo json_encode(['error' => __('errors.noFileUploaded')]);
exit;
}
// Prüfe Anzahl der bereits hochgeladenen Dateien
if (count($_SESSION['uploaded_files']) >= MAX_FILES) {
http_response_code(400);
echo json_encode(['error' => __('errors.maxFilesReached', ['max' => MAX_FILES])]);
exit;
}
$uploadedFile = $_FILES['file'];
// Validiere Dateityp
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $uploadedFile['tmp_name']);
finfo_close($finfo);
if (!in_array($mimeType, ALLOWED_TYPES)) {
http_response_code(400);
echo json_encode(['error' => __('errors.unsupportedFileType', ['type' => $mimeType])]);
exit;
}
// Validiere Dateigröße
if ($uploadedFile['size'] > MAX_FILE_SIZE) {
http_response_code(400);
echo json_encode(['error' => __('errors.fileTooLarge', ['max' => formatFileSize(MAX_FILE_SIZE)])]);
exit;
}
// Generiere eindeutigen Dateinamen
$fileExtension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
$uniqueFilename = generateUniqueFilename($fileExtension);
$uploadPath = UPLOAD_PATH . $uniqueFilename;
// Verschiebe Datei in Upload-Verzeichnis
if (!move_uploaded_file($uploadedFile['tmp_name'], $uploadPath)) {
http_response_code(500);
echo json_encode(['error' => __('errors.saveFileFailed')]);
exit;
}
// Hole Bildinfos
$imageInfo = getimagesize($uploadPath);
if ($imageInfo === false) {
unlink($uploadPath);
http_response_code(400);
echo json_encode(['error' => __('errors.invalidImageFile')]);
exit;
}
// Speichere Dateiinformationen in Session
$fileData = [
'id' => $uniqueFilename,
'original_name' => sanitizeFilename($uploadedFile['name']),
'filename' => $uniqueFilename,
'size' => $uploadedFile['size'],
'mime_type' => $mimeType,
'width' => $imageInfo[0],
'height' => $imageInfo[1],
'upload_time' => time(),
'path' => $uploadPath
];
$_SESSION['uploaded_files'][$uniqueFilename] = $fileData;
// Bereinige alte Dateien
cleanupOldFiles();
// Sende Erfolgsantwort
echo json_encode([
'success' => true,
'file' => [
'id' => $fileData['id'],
'name' => $fileData['original_name'],
'size' => formatFileSize($fileData['size']),
'dimensions' => $fileData['width'] . ' x ' . $fileData['height'] . ' px',
'type' => $fileData['mime_type']
],
'total_files' => count($_SESSION['uploaded_files'])
]);