Skip to content

Instantly share code, notes, and snippets.

@milivojsa
Last active January 17, 2019 18:12
Show Gist options
  • Save milivojsa/c83902908ca8ed7d43b3adc03add15c8 to your computer and use it in GitHub Desktop.
Save milivojsa/c83902908ca8ed7d43b3adc03add15c8 to your computer and use it in GitHub Desktop.
<?php
namespace App\Services;
use Storage;
class FileService
{
/**
* @param \Illuminate\Http\UploadedFile $file
* @param string $dir
* @param string $name
* @param bool $public - Append public prefix to directory
*
* @return string - Name of the file or false
*/
public function upload($file, $dir, $name = '', $public = true)
{
try {
$this->processUpload($file, $dir, $name, $public);
} catch (Exception $e) {
report($e);
return false;
}
}
/**
* @param \Illuminate\Http\UploadedFile $file
* @param string $dir
* @param string $name
* @param bool $public - Append public prefix to directory
*
* @return string - Name of the file/files
*/
private function processUpload($file, $dir, $name, $public)
{
if ($public === true) {
$this->makeDirectory("public/{$dir}");
}
if (is_array($file)) {
return $this->processMultipleFileUploads($dir, $file, $name);
}
return $this->processSingleFileUpload($dir, $file, $name);
}
/**
* @param string $dir
* @param \Illuminate\Http\UploadedFile $file
* @param string $name
*
* @return string
*/
private function processSingleFileUpload($dir, $file, $name) {
// TODO
// IMAGE OPTIMIZATION
// if ($file)
// return $this->processImageUpload($dir, $name, $height = false, $width = false);
return $file->storeAs(
$dir,
$this->getFileNameWithExtension($file, $name)
);
}
/**
* @param string $dir
* @param array $files
* @param string $name
*
* @return array - Names of the uploaded files
*/
private function processMultipleFileUploads($dir, $files, $name) {
$uploadedFiles = [];
foreach ($files as $file) {
$uploadedFiles[] = $this->processSingleFileUpload($dir, $file, $name);
}
return $uploadedFiles;
}
/**
* Makes directory if it does not exist
*
* @param string $dir
*
* @return void
*/
private function makeDirectory($dir)
{
if (! Storage::exists($dir)) {
Storage::makeDirectory($dir);
}
}
/**
* @param \Illuminate\Http\UploadedFile $file
* @param string $name
* @return string - File name with extension
*/
private function getFileNameWithExtension($file, $name) {
if ($name === '') {
return $file->hashName();
}
return $name . '_' . $file->hashName();
}
}
@milepanic
Copy link

hashName(); else $name .= '_' . mt_rand() . '.' . $file->getClientOriginalExtension(); // save file and return path return $file->storeAs($dir, $name); } catch (Exception $e) { return $e; } } /** * * Method for multiple file upload * */ public static function uploadMultiple($files, $dir, $name = false) { if (! is_array($files)) return null; $uploaded = []; foreach ($files as $file) { if ($file != null) { $uploaded[] = self::upload($file, $dir, $name); } } return $uploaded; } }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment