HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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;
    }
}