Php Laravel不在生产服务器上显示图像
我的生产服务器是ubuntu 16.04.3 LTS,我有laravel 5.5 在路线上: /var/www/forumb 我的公用文件夹位于以下目录中: /var/www/forumb/public 用户上传图像,这些图像保存在: /var/www/forumb/public/uploads/images “图像”文件夹具有777个权限 在“图像”文件夹中,有使用封面的图像 这些都是从视图中正常显示的 问题是,从视图中看不到上载用户的图像,并且这些图像位于相同的文件夹图像中 我可以直接从浏览器中看到的封面图像如下: 用户图像 但这些都看不到,laravel返回404错误 从视图中可以看到的唯一图像是与框架一起出现的图像以及位于“图像”文件夹中的图像 在我从filezilla上传一个图像到服务器之前,其他所有的图像都看不到,但也看不到 这只发生在生产服务器上,在我的本地主机上,一切正常 这是视图中的mi代码Php Laravel不在生产服务器上显示图像,php,image,laravel,laravel-5,Php,Image,Laravel,Laravel 5,我的生产服务器是ubuntu 16.04.3 LTS,我有laravel 5.5 在路线上: /var/www/forumb 我的公用文件夹位于以下目录中: /var/www/forumb/public 用户上传图像,这些图像保存在: /var/www/forumb/public/uploads/images “图像”文件夹具有777个权限 在“图像”文件夹中,有使用封面的图像 这些都是从视图中正常显示的 问题是,从视图中看不到上载用户的图像,并且这些图像位于相同的文件夹图像中 我可以直接从浏览
<img class="card-img-top border-bot" src="{{ !is_null(user()->image) ? $profile_image : '/uploads/images/facebook-default-no-profile-pic.jpg' }}" class="img-fluid rounded mx-auto d-block" alt="{!! user()->nombre_empresa !!}">
profile_image()函数
图像正常上载但不显示将上载的文件保存到磁盘时,Laravel会将文件放入
存储/app/public
而不是public
。因此,您需要创建一个符号链接,以便从web访问这些文件
公共磁盘使用本地驱动程序并将这些文件存储在存储/app/public
中。要从web访问它们,您应该创建一个从public/storage
到storage/app/public
的符号链接
要创建符号链接,可以使用storage:link
Artisan命令:
我也受这个问题的困扰。在我的本地主机上,我可以上传和查看图像。在服务器上,我可以上传图像,但无法在浏览器上查看图像,尽管我可以在公共/存储中看到图像。后来我发现我把图像指错了。我希望对我有用的东西对你有用。这就是我所做的
|-www
|--laravelProject
$php artisan storage:link
或运行此脚本
$exitCode=Artisan::call('storage:link',[]);
echo$exitCode;//0退出代码,无错误。
$file = Storage::putFile('images', $request->file('my_image'));
$baseUrl = url('/');
$imagePath = $baseUrl.'/laravelProject/public/storage/'.$file;
$input['image_path'] = $imagePath;
$input['image_root'] = $file; //used when deleting
MobileSlider::create($input);
我不确定这是不是最好的方法,但它对我很有效。在回答您的问题时,@Alexey Mezenin解释了您在制作中没有看到图像的原因 简而言之,在laravel中,您必须使用命令创建指向公用文件夹中存储文件夹的链接,然后才能看到图像 但是生产中的问题是我们不能直接运行命令,但是我们可以通过编程来运行它 因此,编辑您的
routes/web.php
文件并添加以下行:
Route::get('/any-route', function () {
Artisan::call('storage:link');
});
imp注意:请记住,如果您在本地运行了该命令,则存储文件夹已存在于公用文件夹中,因此首先必须删除公用/存储
文件夹
然后,您可以运行指定的路由
/上述路由文件中所述的任何路由。请发布处理上载的控制器功能。您是否可以通过查看主机中的文件系统来验证文件的最终位置?您确定要将图像保存在public/uploads/images
中,而不是存储文件夹中的某个位置吗?如果我确定,因为我可以从终端上看到用户上载的文件在图像文件夹中显示您的使用情况。您是否尝试将相对路径替换为绝对路径为资产
帮助器?我已经尝试过了但是我又试了一次,我发现“public/storage”目录已经存在了。你有没有发现任何错误?我很确定这个解决方案是有效的。不,我没有任何错误消息,只显示了一个白框。在上载图像或试图显示图像时,您是否看到了一个白框?Laravel为图像生成了什么?请显示您用于存储图像的代码。在用户图像应该显示的位置会显示一个白色框。这很奇怪,我不认为这是代码,因为我使用的是Adminlte模板,但无论如何我都会上传代码
php artisan storage:link
$file = Storage::putFile('images', $request->file('my_image'));
$baseUrl = url('/');
$imagePath = $baseUrl.'/laravelProject/public/storage/'.$file;
$input['image_path'] = $imagePath;
$input['image_root'] = $file; //used when deleting
MobileSlider::create($input);
Route::get('/any-route', function () {
Artisan::call('storage:link');
});