在Laravel中将本地文件视为上载文件

时间:2019-07-01 12:33:59

标签: php laravel file-upload

Laravel 5.7。我有一个用于处理图片上传的类:

use Intervention\Image\Facades\Image as ImageHandler;

class ImageUpload
{
    /**
     * Upload an image to the public folder
     *
     * @param \Illuminate\Http\UploadedFile $imageFile
     * @return void
     */
    public function upload($imageFile)
    {
        $this->extension = $imageFile->extension();
        $this->filename = $this->getHashedFilename($imageFile);
        $this->originalImage = ImageHandler::make($imageFile->getRealPath())->encode();
        // Do other stuff...
        $this->saveImage();
    }
}

将上传的文件传递给它时可以使用。但是我想重用代码来处理存储在文件系统中的图像。例如。我有一个占位符图像,存储在resources/images中。我想将其传递给上述upload类的ImageUpload方法。但是我对文件的引用显然是一个字符串,而upload方法需要一个UploadedFile的实例。因此,当我尝试执行此操作时:

class FooBar
{
    public function savePlaceholder()
    {
        $placeholderImage = asset('images/test.png');
        $uploadHandler = new ImageUpload();
        $uploadHandler->upload($placeholderImage);
    }
}

收到错误消息是因为我传递的是字符串而不是UploadedFile的实例。

1 个答案:

答案 0 :(得分:0)

如果ImageUpload是您不想重写的第三方库类,我在这里看到2个选项:

  1. 始终检查是否将UploadedFile的实例传递给ImageUpload->upload()。如果为UploadedFile,请将其转换为string
  2. 扩展ImageUpload类并覆盖upload函数,您应在其中执行选项1中所述的相同操作。