From 371b55bd643373bcc1f74860135c1cc14d49c475 Mon Sep 17 00:00:00 2001 From: Peter Hoppe Date: Tue, 3 Jan 2023 18:20:56 +0100 Subject: [PATCH] upload php --- .vscode/launch.json | 13 ++- php/php-dog/classes/lib.php | 31 ++++- php/php-dog/login.php | 3 +- php/php-dog/upload.php | 180 ++++++++++++++++++++---------- src/services/FileUploadService.ts | 5 +- 5 files changed, 160 insertions(+), 72 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c24d1da..d799ae8 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,10 +1,15 @@ { - // Verwendet IntelliSense zum Ermitteln möglicher Attribute. - // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen. - // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - + { + "name": "Listen for Xdebug", + "type": "php", + "request": "launch", + "port": [ + 9003, + 9000 + ] + }, { "type": "chrome", "request": "launch", diff --git a/php/php-dog/classes/lib.php b/php/php-dog/classes/lib.php index ed0ecee..c319d6c 100644 --- a/php/php-dog/classes/lib.php +++ b/php/php-dog/classes/lib.php @@ -46,6 +46,23 @@ class CUser $this->qr_id = $qr_id; $this->email = $email; } + function jsonarray() + { + return json_encode([ + 'id' => $this->id, + 'qr_id' => $this->qr_id, + 'email' => $this->email + ]); + } + function phparray() + { + return ([ + 'id' => $this->id, + 'qr_id' => $this->qr_id, + 'email' => $this->email + ]); + } + } /** @@ -81,18 +98,26 @@ function random_str( function getNewFilename($targetDir, $fileExt, $length) { $newFname = random_str($length); + +// echo "newFname " . $newFname . "\n"; + $maxtries = 100000; // prevent endless loop, most unlikely $tries = 0; + // echo "file_exists " . $targetDir . '/' . $newFname . '.' . $fileExt . "\n"; + // echo "file_exists " . file_exists($targetDir . '/' . $newFname . '.' . $fileExt) . "\n"; while(file_exists($targetDir . '/' . $newFname . '.' . $fileExt) && $tries < $maxtries) { +// echo "file_exists " . $targetDir . '/' . $newFname . '.' . $fileExt . "\n"; ++$tries; $newFname = random_str($length); + // echo "tries " . $tries . "\n"; + // echo "newFname " . $newFname . "\n"; } - if($tries < $maxtries) + if($tries >= $maxtries) { $newFname = ""; } - return $newFname; + return $newFname .".".$fileExt; } -?> \ No newline at end of file +?> diff --git a/php/php-dog/login.php b/php/php-dog/login.php index b9779e5..299dd51 100644 --- a/php/php-dog/login.php +++ b/php/php-dog/login.php @@ -89,7 +89,8 @@ try $row['qr_id'], $row['email'] ); - $_SESSION['user'] = $user; +// $_SESSION['user'] = $user; + $_SESSION['user'] = $user->phparray(); $returnData = new CMsg( 1, diff --git a/php/php-dog/upload.php b/php/php-dog/upload.php index 5b4f5b6..1b22ee7 100644 --- a/php/php-dog/upload.php +++ b/php/php-dog/upload.php @@ -5,79 +5,135 @@ header("Access-Control-Allow-Methods: POST"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); -session_start(); -require __DIR__.'/classes/Database.php'; -require __DIR__.'/classes/lib.php'; +try { -$result = new CMsg(0); -if(!isset($_SESSION["user"])) -{ - $result = new CMsg(0, 401, "not logged in"); - return $result->jsonarray(); -} + session_start(); -$user = $_SESSION["user"]; -$allowTypes = array('jpg','png','jpeg','gif','pdf'); +// $resp = json_decode(' +// { +// "success": 1, +// "user": { +// "__PHP_Incomplete_Class_Name": "CUser", +// "id": 11, +// "qr_id": "YQiwEB", +// "email": "p.para@gmx.de" +// } +// }'); -// File upload path -$targetDir = "uploads/".$user->qr_id; -if (!file_exists($targetDir)) -{ - mkdir($targetDir, 0755, true); -} +// $_SESSION["user"] = $resp["user"]; -$fileName = basename($_FILES["file"]["name"]); -$fileType = pathinfo($fileName,PATHINFO_EXTENSION); + require __DIR__ . '/classes/Database.php'; + require __DIR__ . '/classes/lib.php'; -if(!in_array($fileType, $allowTypes)) -{ - $result = new CMsg( - 0, - 406, - 'Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed to upload.'); - return $result->jsonarray(); -} + $result = new CMsg(0); -$newFilename = getNewFilename($targetDir, $fileType, 20); -if(strlen($newFilename) == 0) -{ - $result = new CMsg( - 0, - 507, - 'Too many uploaded files on the server, try it again later'); - return $result->jsonarray(); -} - -$targetFilePath = $targetDir . '/' . $fileName; - -if(isset($_POST["submit"]) && !empty($_FILES["file"]["name"])) -{ - // Upload file to server - if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)) + if (!isset($_SESSION["user"])) { - // Insert image file name into database - $update = $db->query("UPDATE dogs SET picture = '".$fileName."' WHERE qr_id = ".$user->qr_id); - if($update) - { - $result = new CMsg(1,200,"The file ".$fileName. " has been uploaded successfully."); - } - else - { - $result = new CMsg(0,500,"File upload failed, please try again."); - } + $result = new CMsg(0, 401, "not logged in"); + echo $result->jsonarray(); + return $result->jsonarray(); } + + $user = $_SESSION["user"]; + $allowTypes = array('jpg', 'png', 'jpeg', 'gif', 'pdf'); + //echo var_dump($user); + // File upload path + $targetDir = "../uploads/" . $user["qr_id"]; + if (!file_exists($targetDir)) + { + mkdir($targetDir, 0755, true); + } + echo "targetDir ". $targetDir . "\n"; + + $fileName = basename($_FILES["file"]["name"]); + $fileType = pathinfo($fileName, PATHINFO_EXTENSION); + + echo "fileName ".$fileName . "\n"; + echo "fileType ".$fileType . "\n"; + + if (!in_array($fileType, $allowTypes)) + { + $result = new CMsg( + 0, + 406, + 'Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed to upload.' + ); + echo $result->jsonarray(); + return $result->jsonarray(); + } + + $newFilename = getNewFilename($targetDir, $fileType, 20); + + echo "newFilename ".$newFilename . "\n"; + + + if (strlen($newFilename) == 0) + { + $result = new CMsg( + 0, + 507, + 'Too many uploaded files on the server, try it again later' + ); + echo $result->jsonarray(); + + return $result->jsonarray(); + } + + $targetFilePath = $targetDir . '/' . $newFilename; + echo "targetFilePath ". $targetFilePath."\n"; + + if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])) + { + echo "submit file name ". $_FILES["file"]["name"]."\n"; + // Upload file to server + if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)) + { + echo "move ok! ". $targetFilePath."\n"; + $newPathFilename = '/' . $user["qr_id"] . '/' . $newFilename; + echo "query " . "UPDATE dogs SET picture = '" . $newPathFilename . "' WHERE qr_id = '" . $user["qr_id"]."'\n"; + $db_connection = new Database(); + $conn = $db_connection->dbConnection(); + + + echo var_dump($conn); + // Insert image file name into database + $statement = $conn->prepare("UPDATE dogs SET picture = :filePic WHERE qr_id = :user_qr_id"); + $update = $statement->execute(array('filePic' => $newPathFilename, 'user_qr_id' => $user["qr_id"])); + echo var_dump($update); + $count = $statement->rowCount(); + echo 'rowcount ' . $count . '\n'; + + + + if ($update && $count > 0) + { + $result = new CMsg(1, 200, "The file " . $newPathFilename . " has been uploaded successfully."); + echo $result->jsonarray(); + } + else + { + $result = new CMsg(0, 500, "File upload failed, please try again."); + echo $result->jsonarray(); + } + } + else + { + $result = new CMsg(0, 500, "Sorry, there was an error uploading your file."); + } + } else { - $result = new CMsg(0,500,"Sorry, there was an error uploading your file."); + $result = new CMsg(1, 204, 'Please select a file to upload.'); } -} -else -{ - $result = new CMsg(1,204,'Please select a file to upload.'); -} -// Display status message -echo $result->jsonarray(); -?> \ No newline at end of file + // Display status message + echo $result->jsonarray(); +} +catch(Exception $e) +{ + $result = new CMsg(0, 500, $e->getMessage() ); + echo $result->jsonarray(); +} +?> diff --git a/src/services/FileUploadService.ts b/src/services/FileUploadService.ts index b673738..317aa6c 100644 --- a/src/services/FileUploadService.ts +++ b/src/services/FileUploadService.ts @@ -6,6 +6,7 @@ const upload = (file: File, onUploadProgress: any): Promise => { let formData = new FormData(); formData.append("file", file); + formData.append("submit", "1"); let uploadRes = Axios.post("upload.php", formData, { headers: { @@ -14,8 +15,8 @@ const upload = (file: File, onUploadProgress: any): Promise => { onUploadProgress, }); - let a: number = 1+3; - a++; + // let a: number = 1+3; + // a++; return uploadRes; };