无法保存图像干预图像.Image.php第138行中的NotWritableException

ark*_*Dev 8 php image laravel-5

我试图保存一个被操纵的图像,我将他们推到s3.

我的代码有效此代码将图像直接保存在公共文件夹中*

public function store(Filesystem $filesystem)
{

    $request = Input::all();

    $validator = Validator::make($request, [
        'images' => 'image'
    ]);

    if ($validator->fails()) {
        return response()->json(['upload' => 'false']);
    }

    $postId = $request['id'];

    $files = $request['file'];

    $media = [];

    $watermark = Image::make(public_path('img/watermark.png'));

    foreach($files as $file) {

        $image = Image::make($file->getRealPath());
        $image->crop(730, 547);
        $image->insert($watermark, 'center');
        $image->save($file->getClientOriginalName());

    }

}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是能够将其保存在自己的文件夹中.首先,在公共文件夹的存储中,为博客文章存储图像的最佳位置是什么?但无论如何当我这样做:

$image->save('blogpost/' . $postId . '/' . $file->getClientOriginalName());

// Or this

$image->save(storage_path('app/blogpost/' . $postId . '/' . $file->getClientOriginalName()));
Run Code Online (Sandbox Code Playgroud)

我收到错误:

公共文件夹

Image.php第138行中的NotWritableException:无法将图像数据写入路径(blogpost/146/cars/image.jpg)

要么

存储路径

Image.php第138行中的NotWritableException:无法将图像数据写入路径/code/websites/blog/storage/app/blogpost/146/image.jpg

我试过了

cd storage/app/  
chmod -R 755 blogpost
Run Code Online (Sandbox Code Playgroud)

它仍然无法工作

谢谢您阅读此篇

Tom*_*nal 6

您可以通过Intervation/Image使用function 将变量强制转换为数据流来解决它stream。然后使用StorageLaravel门面保存图像。

$img = Image::make('path-to-the-image.png')->crop(...)->insert->stream('jpg', 90)
Storage::put('where_I_want_the_image_to_be_stored.jpg', $img);
Run Code Online (Sandbox Code Playgroud)


ark*_*Dev 5

好的,这就是我如何解决它,我在存储之前先创建了目录,

Storage::disk('local')->makeDirectory('blogpost/' . $postId);
Run Code Online (Sandbox Code Playgroud)

创建文件夹后,我继续存储被操纵的图像,如下所示:

$image->save(storage_path('app/blogpost/' . $postId . '/' . $imageName));
Run Code Online (Sandbox Code Playgroud)

然后将图像推送到S3

$filesystem->put('blogpost/' . $postId . '/' . $imageName, file_get_contents(storage_path('app/blogpost/' . $postId . '/' . $imageName)));
Run Code Online (Sandbox Code Playgroud)

这很有效