servermgrv2/app/Controllers/Trait/UpDownloadTrait.php
2023-08-16 09:16:16 +09:00

96 lines
3.8 KiB
PHP

<?php
namespace App\Controllers\Trait;
use CodeIgniter\HTTP\Files\UploadedFile;
trait UpDownloadTrait
{
//Upload FIle관련
private function upDownload_file_process(UploadedFile $upfile): ?string
{
$filename = null;
$uploaded_filename = null;
if ($upfile->isValid() && !$upfile->hasMoved()) {
$filename = $upfile->getName();
$uploaded_filename = $upfile->getRandomName();
$upfile->move(PATHS['UPLOAD'], $uploaded_filename);
//move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요
$uploaded_filename = $upfile->getName();
} else {
return null;
}
return $filename . DEFAULTS['DELIMITER_FILE'] . $uploaded_filename;
}
public function upload_file_procedure(string $field): ?string
{
return $this->upload_file_process($this->request->getFile($field));
}
public function upload_multiple_file_procedure(string $field): array
{
//Multiple파일의경우 html에서는 필드명[]를 넣어야하며
//rule에서 "uploaded[필드명.0]|is_image[필드명]~~" 이런식으로 넣어야함
$files = array();
if ($upfiles = $this->request->getFiles()) {
foreach ($upfiles[$field] as $upfile) {
if ($upfile->isValid() && !$upfile->hasMoved()) {
$file = $this->upload_file_process($upfile);
if (!is_null($file)) {
array_push($files, $file);
}
}
}
}
return $files;
}
private function image_resize_process(UploadedFile $upfile, $uploaded_filename, $x = 25, $y = 25)
{
$image = \Config\Services::image();
$image->withFile($upfile)
->resize($x, $y, true, 'height')
->save(PATHS['UPLOAD_IMAGE'] . $uploaded_filename);
}
private function upload_image_process(UploadedFile $upfile): ?string
{
//참고:https://www.positronx.io/codeigniter-resize-image-with-image-manipulation-tutorial/
$filename = null;
$uploaded_filename = null;
if ($upfile->isValid() && !$upfile->hasMoved()) {
$filename = $upfile->getName();
$uploaded_filename = $upfile->getRandomName();
$this->image_resize_process($upfile, "small_" . $uploaded_filename);
$this->image_resize_process($upfile, "middle_" . $uploaded_filename, 50, 50);
$this->image_resize_process($upfile, "large_" . $uploaded_filename, 100, 100);
$upfile->move(PATHS['UPLOAD_IMAGE'], $uploaded_filename);
//move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요
$uploaded_filename = $upfile->getName();
} else {
return null;
}
return $filename . DEFAULTS['DELIMITER_FILE'] . $uploaded_filename;
}
public function upload_image_procedure(string $field): ?string
{
return $this->upload_image_process($this->request->getFile($field));
}
public function upload_multiple_image_procedure(string $field): array
{
//Multiple파일의경우 html에서는 필드명[]를 넣어야하며
//rule에서 "uploaded[필드명.0]|is_image[필드명]~~" 이런식으로 넣어야함
$filenames = array();
if ($upfiles = $this->request->getFiles()) {
foreach ($upfiles[$field] as $upfile) {
if ($upfile->isValid() && !$upfile->hasMoved()) {
$file = $this->upload_image_process($upfile);
if (!is_null($file)) {
array_push($files, $file);
}
}
}
}
return $filenames;
}
}