Laravel 应用程序存储图像无法加载并重定向到 404

Sau*_*try 5 php image laravel

我在共享托管服务器上托管了 Laravel 应用程序。在服务器上有 2 个文件夹:

  • 1) laravelapp -> 包含 (app,config,database,vendor...etc 文件夹)

  • 2) public_html -> contains (css,js,images,storage folders)

我使用以下代码上传图片:

 if($request->hasFile('file')){
     $filenameWithExt=$request->file('file')->getClientOriginalName();
     $filename=pathinfo($filenameWithExt,PATHINFO_FILENAME);
     $extension=$request->file('file')->getClientOriginalExtension();
     $fileNameToStore=str_slug($filename,'_').'_'.time().'.'.$extension;
     request()->file->move(public_path('storage/profile'), $fileNameToStore);
     $image="/storage/profile/".$fileNameToStore;
}
Run Code Online (Sandbox Code Playgroud)

它已成功将文件上传到laravelapp/public/storage/profile文件夹

我创建符号链接到laravelapp/public/storagepublic_html/storage

在数据库中:imagepath 被保存为 /storage/profile/user1.png

在我使用的刀片模板中: <img src="{{$img}}" />

但 imageurl :

www.mydomain.com/storage/profile/user1.png 重定向到 404 页面并且图像不显示。

任何人请帮我解决问题。

Eri*_*eni 10

这在共享托管服务器上对我有用:

像这样编辑config/filesystems.php和修改public零件

'public' => [
        'driver' => 'local',
        'root' => storage_path(),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ]
Run Code Online (Sandbox Code Playgroud)

请注意, storage_path() 不接受任何参数。现在storage从您的public目录中删除文件夹(如果已经存在),然后执行:

php artisan storage:link
Run Code Online (Sandbox Code Playgroud)


Hir*_*hel 5

因此,根据我们在评论中的讨论和Laravel 5.5文档,您的可公开访问的文件应该放在目录中storage/app/public为了使它们可以从网络访问,您应该创建一个符号链接public/storagestorage/app/public.

ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用帮助程序在视图中创建文件的 URL asset

echo asset('storage/file.txt');
Run Code Online (Sandbox Code Playgroud)

希望这会对您和其他用户有所帮助!


Sau*_*try 3

1)将文件存储在 laravelapp/storage/app/public/cover/ 文件夹中

 use Illuminate\Support\Facades\Storage;
 $path=$request->file('cover_image')->storeAs('public/cover_images',$fileNameToStore);
Run Code Online (Sandbox Code Playgroud)

2)将文件存储在 laravelapp/public/cover/ 文件夹中

 $path=request()->cover_image->move(public_path('storage/profile'), $fileNameToStore);
Run Code Online (Sandbox Code Playgroud)

在共享托管服务器中有 2 个文件夹:

laravelapp 和 public_html

由于我使用第二种方式上传图像,我通过创建从 laravelapp/public/storage 文件夹到 public_html/ 的符号链接解决了这个问题

ln -s /home/username/laravelapp/public/storage  /home/username/public_html/
Run Code Online (Sandbox Code Playgroud)