【问题标题】:Image intervention save path图像干预保存路径
【发布时间】:2020-01-25 02:13:30
【问题描述】:

我的问题是当我需要保护图像时如何创建合适的路径。我尝试了教程,之前的 SO 干预回答了问题,但无法应用建议的解决方案。我在 Laravel 中使用图像干预。

我现在的路径是:

            $filenameWithExtThumb = $request->file("thumbnail")->getClientOriginalName();
            $filenameThumb = pathinfo($filenameWithExtThumb, PATHINFO_FILENAME);
            $extensionThumb = $request->file("thumbnail")->getClientOriginalExtension();
            $fileNameToStoreThumb = $filenameThumb."_".time().".".$extensionThumb;

            $image_resize = Image::make($request->file("thumbnail")->getRealPath());              
            $image_resize->resize(320, 240);

            $pathThumb = $request->file("thumbnail")->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

如果我只是将其存储为未调整大小,则效果很好。如果我使用

$pathThumb = $image_resize->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

它不起作用。 我也试过了:

$image_resize->save("/public/storage/".auth()->user()->name."'s Thumbnails");

这也不起作用。 和

$pathThumb = $image_resize->save("/public/storage/".auth()->user()->name."'s Thumbnails");

我想用这个:

$pathThumb = $request->file("thumbnail")->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

$image_resize。有可能吗?如何实现?

我的路径是: "public/storage".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb 示例:public/storage/ -> Johnny's Thumbnails -> nameOfTheFile.jpg

编辑1: 通过这样的路径解决: $pathThumb = $image_resize->save(public_path("storage/".auth()->user()->name."'s Thumbnails/".$fileNameToStoreThumb));

现在我想删除以前的缩略图,除非它不是“nothumbnail.jpg”。

                if ($request->hasFile('thumbnail')) {

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = $fileNameToStoreThumb;
                    }       

                    if($video->thumbnail!=="../nothumbnail.jpg"){
                        Storage::delete("public/storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail);

                        $video->thumbnail = $fileNameToStoreThumb;
                    }   

                }
                else{

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = "../nothumbnail.jpg";
                    } 

                    if($video->thumbnail!=="../nothumbnail.jpg"){
                        Storage::delete("public/storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail);

                        $video->thumbnail = "../nothumbnail.jpg";
                    } 

                }

又是路径问题:(

Edit2: edit1 的解决方案: 几个小时后我没有发现错误,因为我修改了我的原始代码,所以我一生都找不到它。 所以我不小心设计了非常偶然的解决方案:

                $filenameWithExtThumb = null;
                $filenameThumb = null;
                $extensionThumb = null;
                $fileNameToStoreThumb = null;
                $image_resize = null;
                $pathThumb = null;

                if($request->hasFile("thumbnail")){

                    $filenameWithExtThumb = $request->file("thumbnail")->getClientOriginalName();
                    $filenameThumb = pathinfo($filenameWithExtThumb, PATHINFO_FILENAME);
                    $extensionThumb = $request->file("thumbnail")->getClientOriginalExtension();
                    $fileNameToStoreThumb = $filenameThumb."_".time().".".$extensionThumb;

                    $image_resize = Image::make($request->file("thumbnail")->getRealPath());              
                    $image_resize->resize(320, 240);

                    $pathThumb = $image_resize->save(public_path("storage/".auth()->user()->name."'s Thumbnails/".$fileNameToStoreThumb));

                    if($video->thumbnail!=="../nothumbnail.jpg"){

                        unlink(public_path("storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail));
                        $video->thumbnail = $fileNameToStoreThumb;

                    }

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = $fileNameToStoreThumb;

                    }

                }
                else{

                    if($video->thumbnail!=="../nothumbnail.jpg"){

                        unlink(public_path("storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail));
                        $video->thumbnail = "../nothumbnail.jpg";

                    }

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = "../nothumbnail.jpg";

                    }

                }

虽然没有使用 Storage 门面,但 vanilla php unlink 用于文件删除。不使用 Laravel 的内置功能而不是 vanilla 的可以吗?

【问题讨论】:

  • 我会从路径名中删除'。先猜一猜,一目了然。即使路径名中有空格对我来说也很奇怪,所以也尝试删除它们。

标签: laravel intervention


【解决方案1】:

我认为存储路径有些混乱。试试这段代码,确保你已经完成了php artisan storage:linkDocs

if ($request->hasFile('thumbnail') && $request->file('thumbnail')->isValid()) {
    $extension = $request->file("thumbnail")->getClientOriginalExtension();
    $image_resize = Image::make($request->file('thumbnail'));
    $image_resize->resize(320, 240);
    $hash = md5($image_resize->__toString());
    $filename = $hash . "." . $extension;
    $image_resize->save(storage_path("app/public/" . auth()->user()->name . "'s Thumbnails/" . $filename)); 
}

这应该将文件保存到 storage/app/public/User's Thumbnails/filename.ext 链接自 /public/storage/User's Thumbnails/filename.ext

【讨论】:

  • 解决了这个问题。见编辑。我还有另一个问题,请参阅编辑。
  • 参见 edit2。更重要的是,请参阅底部的问题。
猜你喜欢
  • 2016-01-11
  • 2019-02-25
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2017-01-25
相关资源
最近更新 更多