我在共享托管服务器上托管了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页面,图片无法显示。
任何人都可以帮我解决问题。
答案 0 :(得分:2)
因此,根据我们在评论中的讨论并根据Laravel 5.5
文档,您的可公开访问的文件应放在目录storage/app/public
中。为了使它们可以从Web访问,您应该创建一个符号链接public/storage
至storage/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