UploadedFile.php 2.33 KB
Newer Older
Juliper committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
<?php

namespace Illuminate\Http;

use Illuminate\Container\Container;
use Illuminate\Support\Traits\Macroable;
use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory;
use Symfony\Component\HttpFoundation\File\UploadedFile as SymfonyUploadedFile;

class UploadedFile extends SymfonyUploadedFile
{
    use FileHelpers, Macroable;

    /**
     * Store the uploaded file on a filesystem disk.
     *
     * @param  string  $path
     * @param  string|null  $disk
     * @return string|false
     */
    public function store($path, $disk = null)
    {
        return $this->storeAs($path, $this->hashName(), $disk);
    }

    /**
     * Store the uploaded file on a filesystem disk with public visibility.
     *
     * @param  string  $path
     * @param  string|null  $disk
     * @return string|false
     */
    public function storePublicly($path, $disk = null)
    {
        return $this->storeAs($path, $this->hashName(), $disk, 'public');
    }

    /**
     * Store the uploaded file on a filesystem disk with public visibility.
     *
     * @param  string  $path
     * @param  string  $name
     * @param  string|null  $disk
     * @return string|false
     */
    public function storePubliclyAs($path, $name, $disk = null)
    {
        return $this->storeAs($path, $name, $disk, 'public');
    }

    /**
     * Store the uploaded file on a filesystem disk.
     *
     * @param  string  $path
     * @param  string  $name
     * @param  string|null  $disk
     * @param  string|null  $visibility
     * @return string|false
     */
    public function storeAs($path, $name, $disk = null, $visibility = null)
    {
        $factory = Container::getInstance()->make(FilesystemFactory::class);

        return $factory->disk($disk)->putFileAs($path, $this, $name, $visibility);
    }

    /**
     * Create a new file instance from a base instance.
     *
     * @param  \Symfony\Component\HttpFoundation\File\UploadedFile  $file
     * @param  bool $test
     * @return static
     */
    public static function createFromBase(SymfonyUploadedFile $file, $test = false)
    {
        return $file instanceof static ? $file : new static(
            $file->getPathname(),
            $file->getClientOriginalName(),
            $file->getClientMimeType(),
            $file->getClientSize(),
            $file->getError(),
            $test
        );
    }
}