Php 尝试获取文件时,Laravel 6存储导致404错误

Php 尝试获取文件时,Laravel 6存储导致404错误,php,laravel,storage,Php,Laravel,Storage,我尝试在Laravel中设置上传脚本,并按照文档中的说明进行操作。 我使用Laravel脚本创建了一个符号链接,如下所示 存储->/Users/username/Sites/switch/storage/app/public 当我上传图像,然后返回图像url的结果时,问题就出现了。如您所见,为了匹配符号链接,我在下面将文件夹设置为公共文件夹 $path = $request->file('manufacturer_image_name')->store('public'); echo

我尝试在Laravel中设置上传脚本,并按照文档中的说明进行操作。 我使用Laravel脚本创建了一个符号链接,如下所示

存储->/Users/username/Sites/switch/storage/app/public

当我上传图像,然后返回图像url的结果时,问题就出现了。如您所见,为了匹配符号链接,我在下面将文件夹设置为公共文件夹

$path = $request->file('manufacturer_image_name')->store('public');
echo asset($path);
这就回来了

问题是这不起作用并抛出404,但如果我手动将url从public更改为storage,它将找到图像

不应该

echo资产$path

是否返回包含存储而不是公共的url

assett$path用于为公用文件夹中的资产生成URL,例如混合生成的CSS和JS文件。如果使用Laravel存储来保存文件,则还必须使用Laravel存储来生成文件URL

Storage::url('file.jpg');

嗯,有很多方法可以做到这一点,挑选最适合你的人

// using storage_path helper
storage_path('public/' . $filename);

// you could make a double-check with File::exist() method
$path = storage_path('public/' . $filename);

if (!File::exists($path)) {
   abort(404);
}

// using asset helper
asset('storage/your_folder/image.png');

// using url helper
url('storage/your_folder/image.png');

// using Storage facade
Storage::url($photoLink)

谢谢你的帮助,我发现这个答案几乎完全符合我的要求

这就是我的结局

if($request->file('manufacturer_image_name')){

                $path = Storage::disk('public')->put('logo', $request->file('manufacturer_image_name'));

                echo $path;

                }

$path现在返回logo/filename.ext,而不是public/or storage/,因此我可以将其直接存储在数据库中。

以下是解决您的问题的最简单和准确的方法


            if(!empty($request->file('manufacturer_image_name'))){
                $path = storage_path('public/image/');

                $image_path = Storage::disk('public')->put('manufacturer_image_name', $request->file('manufacturer_image_name'));

                //Assuming you have a model called Manufacturer and created $manufacturer = new Manufacturer()  
               $manufacturer->manufacturer_image_name = isset($image_path) ?  "storage/".$image_path : "";
            }



$path本身的值是多少?在上面的示例中,path返回no。。。只是$path而不是返回public/XxIX7L75cLZ7cf2xzejc3E6STrcjfeeu3AQcSKz1.png的资产$path您使用什么作为默认磁盘?因为你只是出于好奇告诉它将文件保存在一个名为public的文件夹中,而不是一个名为public的磁盘中,所以在你最初的问题中,我们说手动将public更改为存储是可行的。我只是想确认一下,这只是存储还是存储/公共。。或这对你有用吗?因为你告诉文件存储在本地磁盘根目录下名为public的文件夹中,因此,它返回了磁盘根目录的确切路径:public/xxxxxxxxxx最初我发现,如果我简单地更改为它,它将工作。没有必要手动创建目录,即使您必须这样做,您也不应该授予777目录权限如果他们使用的是公共磁盘,这将工作得更好,但是本地磁盘不生成URL