<?php namespace App\Services; class Upload { public $type; public $src; public $size; public $name; private static function human_filesize($bytes, $dec = 2): string { $size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $factor = floor((strlen($bytes) - 1) / 3); if ($factor == 0) $dec = 0; return sprintf("%.{$dec}f %s", $bytes / (1024 ** $factor), $size[$factor]); } public function __construct($file, $location) { if (is_array($file)) { $tmpname = $file['tmp_name']; $type = explode('/', $file['type'])[0]; $name = $file['name']; $fileext = pathinfo($file['name']); } else { $tmpname = $file; $type = filetype($file); $name = basename($file); $fileext = pathinfo($file, PATHINFO_EXTENSION); } $cstrong = True; $filecdn = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)) . '.' . $fileext['extension']; $folder = $location . $filecdn; if (strtolower (NGALLERY['root']['storage']['type']) == "s3") { $s3 = new \Aws\S3\S3Client([ 'region' => NGALLERY['root']['storage']['s3']['credentials']['region'], 'version' => NGALLERY['root']['storage']['s3']['credentials']['version'], 'credentials' => [ 'key' => NGALLERY['root']['storage']['s3']['credentials']['key'], 'secret' => NGALLERY['root']['storage']['s3']['credentials']['secret'], ], 'endpoint' => NGALLERY['root']['storage']['s3']['domains']['gateway'], ]); $s3->putObject([ 'Bucket' => NGALLERY['root']['storage']['s3']['credentials']['bucket'], 'Key' => $location.$filecdn, 'SourceFile' => $tmpname ]); $this->type = $type; $this->src = NGALLERY['root']['storage']['s3']['domains']['public'] . '/' . $location . $filecdn; $this->size = self::human_filesize(filesize($tmpname)); $this->name = $name; } else { mkdir("{$_SERVER['DOCUMENT_ROOT']}/uploads/{$location}", 0777, true); move_uploaded_file ($tmpname, "{$_SERVER['DOCUMENT_ROOT']}/uploads/{$folder}"); $this->type = $type; $this->src = "/uploads/{$folder}"; $this->size = self::human_filesize(filesize($tmpname)); $this->name = $name; } } public function getType() { return $this->type; } public function getSrc() { return $this->src; } public function getSize() { return $this->size; } public function getName() { return $this->name; } }