Laravel app存储图像无法加载并重定向到404

时间:2018-03-26 10:43:22

标签: php image laravel

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

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

  • 2)public_html - >包含(css,js,图像,存储文件夹)

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

 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;
}

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

我已使用laravelapp/public/storage

创建符号链接到public_html/storage 数据库中的

:imagepath保存为/storage/profile/user1.png

我使用刀片模板

<img src="{{$img}}" />

但是imageurl:

  

www.mydomain.com/storage/profile/user1.png重定向到404页面,图片无法显示。

任何人都可以帮我解决问题。

4 个答案:

答案 0 :(得分:2)

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

ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage

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

echo asset('storage/file.txt');

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

答案 1 :(得分:2)

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

编辑您的config/filesystems.php并修改public部分

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

请注意,storage_path()不带任何参数。现在,从您的storage目录中删除public文件夹,然后执行以下操作:

php artisan storage:link

答案 2 :(得分:1)

  

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

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

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

 $path=request()->cover_image->move(public_path('storage/profile'), $fileNameToStore);

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

laravelapp和public_html

我正在使用第二种方式上传图片,我已经通过从laravelapp / public / storage文件夹创建符号链接到public_html /

解决了这个问题
ln -s /home/username/laravelapp/public/storage  /home/username/public_html/

答案 3 :(得分:1)

可能是您的存储/公用文件夹的符号链接错误,您可以检查该链接是否指向正确的文件夹。使用ls -l命令检查给定文件是否为符号链接,并查找该文件或符号链接指向的目录。

ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16  2020 /usr/bin/python -> python2.7

第一个字符“ l”表示文件是符号链接。 “->”符号显示符号链接指向的文件。

rm命令删除给定的文件和目录。要删除符号链接,请调用rm命令,后跟符号链接名称作为参数:

rm symlink_name

创建到存储公用文件夹的新符号链接

php artisan storage:link