Laravel应用程序存储映像加载失败并重定向到404

lqfhib0f  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(163)

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

  • 1)laravelapp -〉包含(应用程序,配置,数据库,供应商...等文件夹)
  • 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文件夹
我已经使用public_html/storage创建了指向laravelapp/public/storage的符号链接
在数据库中:图像路径保存为/storage/profile/user1.png
在刀片模板中,我用途:<img src="{{$img}}" />
但想象一下:
www.mydomain.com/storage/profile/user1.png 页面找不到页面找不到
请任何人帮助我解决问题。

7y4bm7vi

7y4bm7vi1#

这对我在一个共享主机服务器上工作:
编辑您的config/filesystems.php并修改public部分,如下所示

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

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

php artisan storage:link
3bygqnnd

3bygqnnd2#

因此,根据我们在评论中的讨论和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');

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

anhgbhbe

anhgbhbe3#

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

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/
sbdsn5lh

sbdsn5lh4#

可能是storage/public文件夹的符号链接错误,您可以检查它是否指向正确的文件夹。使用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
rggaifut

rggaifut5#

在cPanel或任何实时服务器中,确保您的存储文件夹和子文件夹具有正确的权限。它应该是644, 755 or 777

相关问题