File: D:/HostingSpaces/SBogers10/netwerkbrabant.komma.pro/app/KommaApp/HTML5Upload/HTML5UploadService.php
<?php
namespace App\KommaApp\HTML5Upload;
use App\KommaApp\Kms\Core\HouseKeeping\CanDoHousekeepingInterface;
use Carbon\Carbon;
use Illuminate\Http\File;
use Illuminate\Http\UploadedFile;
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
class HTML5UploadService implements CanDoHousekeepingInterface
{
/** @var string $pending_upload_folder_name */
protected $pending_upload_folder_name = 'html5_pending_uploads';
public function __construct()
{
\Storage::makeDirectory($this->pending_upload_folder_name);
}
public static function doHouseKeeping()
{
//Delete abandoned uploads
HTML5UploadTrackerModel::where('created_at', '<=', Carbon::now()->subMinutes(config('session.lifetime')))->get()->each(function(HTML5UploadTrackerModel $model) {
\Storage::delete($model->path);
$model->delete();
});
}
/**
* Retrieves a pending HTML 5 uploaded file by its reference. Used by
* external classes that can handle HTML 5 uploads.
*
* @param int $trackerId
* @return null
*/
public function getPendingUploadedFileByUploadTrackerId(int $trackerId)
{
$html5UploadTrackerModel = HTML5UploadTrackerModel::find($trackerId);
if($html5UploadTrackerModel) {
$absolutePath = \Storage::path('').$html5UploadTrackerModel->path;
try {
$file = new File($absolutePath);
} catch (FileNotFoundException $e) {
\Log::error(self::class.': Could not find a file that should be uploaded via HTML 5. AbsolutePath: '.$absolutePath);
return null;
}
return $file;
}
return null;
}
/**
* Used by external classes to give feedback to the uploader service that
* they handled an uploaded file that was pending.
*
* @param string $fileName
* @throws \Exception
*/
public function pendingUploadFileProcessedForAuthUser(string $fileName)
{
$html5UploadTrackerModel = HTML5UploadTrackerModel::where([
['user_id', '=', \Auth::user()->id],
['file_name', '=', $fileName],
])->first();
if(!$html5UploadTrackerModel) return;
\Storage::delete($html5UploadTrackerModel->path); //Just to make sure that it is really deleted. But it should be moved already be a class processing the HTML5 uploads
$html5UploadTrackerModel->delete();
}
/**
* @param UploadedFile $file
* @return HTML5UploadTrackerModel
*/
public function createTrackerModelForFile(UploadedFile $file)
{
$path = $file->store($this->pending_upload_folder_name);
$html5UploadTrackerModel = new HTML5UploadTrackerModel();
$html5UploadTrackerModel->user_id = \Auth::user()->id;
$html5UploadTrackerModel->file_name = $file->getClientOriginalName();
$html5UploadTrackerModel->mime_type = $file->getClientMimeType();
$html5UploadTrackerModel->path = $path;
$html5UploadTrackerModel->save();
return $html5UploadTrackerModel;
}
}