mirror of
https://github.com/claradex/nativegallery.git
synced 2024-12-23 00:50:55 +03:00
127 lines
4.4 KiB
PHP
127 lines
4.4 KiB
PHP
<?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;
|
||
$folder = $location . $filecdn;
|
||
|
||
if (strtolower (NGALLERY['root']['storage']['type']) == "s3")
|
||
{
|
||
|
||
if (NGALLERY['root']['video']['upload']['cloudflare-bypass'] === true) {
|
||
if ($location === 'cdn/video') {
|
||
if (filesize($_SERVER['DOCUMENT_ROOT'].'/'.$location.$filecdn) >= 94371840) {
|
||
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;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
$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
|
||
{
|
||
echo $tmpname;
|
||
$location = "your-location"; // Название локации
|
||
$folder = "{$location}/" . basename($tmpname); // Создаем корректное имя для папки с файлом
|
||
|
||
$uploadDir = "{$_SERVER['DOCUMENT_ROOT']}/uploads/{$location}"; // Полный путь к директории
|
||
|
||
// Создание директории, если она не существует
|
||
if (!is_dir($uploadDir)) {
|
||
mkdir($uploadDir, 0777, true);
|
||
}
|
||
|
||
// Путь к файлу, куда он должен быть перемещен
|
||
$destination = "{$uploadDir}/" . basename($tmpname);
|
||
|
||
// Перемещение файла
|
||
if (move_uploaded_file($tmpname, $destination)) {
|
||
echo "Файл успешно перемещен!";
|
||
} else {
|
||
echo "Ошибка при перемещении файла.";
|
||
}
|
||
|
||
$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;
|
||
}
|
||
}
|
||
|