php图片保存在服务器上 数据库中存储图片的uri地址.,laravel中通过url访问存储在storage下面的图片...

这篇博客讲述了在laravel框架中如何处理服务器无法直接访问storage目录下图片的问题。通过在routes.php中定义路由,并利用ImageRoute.php类,实现了通过/imgsys/路径访问storage/images/目录下图片的功能。尽管路由定义有些冗余,但这种方式可以解决目录深度不大的情况下的图片访问需求。
摘要由CSDN通过智能技术生成

那天和别个小组交叉检查代码的时候,看到他们的图片是通过DataURI的方式去实现的。大概长这样。

![](http://upload-images.jianshu.io/upload_images/1370471-b17e8447d83ffcc7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这种写法看起来并非炫技。就问为什么要这样写呀。原来图片都保存在laravel框架的storage目录,服务器不能直接访问该目录,但是在php执行的过程中则可以访问。他们就不知道怎么写图片的链接地址了。所以问题就变成了“怎么在php脚本中输出一张图片“。

一个简单的小例子

假如网站根目录下有index.php和1.jpg,通过下面的程序![](index.php)能起到和![](1.jpg)一样的效果。

在laravel中实现

试想一下:在storage/images/目录下有1.jpg和2.jpg这两张图片,要怎么能够才能通过/imgsys/1.jpg和/imgsys/2.jpg来访问到这两张图片啦?如果3.jpg在storage/images/other/3.jpg,那么怎么能够通过/imgsys/other/3.jpg来访问啦?

解决这个问题就要涉及到laravel框架里的路由功能了。在routes.php中添加如下代码:

Route::get('imgsys/{one?}/{two?}/{three?}/{four?}/{five?}/{six?}/{seven?}/{eight?}/{nine?}',function(){

\App\Util\ImageRoute::imageStorageRoute();

});

是不是觉得imgsys/{one?}/{two?}/{three?}/{four?}/{five?}/{six?}/{seven?}/{eight?}/{nine?}有一些冗余。确实是这样的,但是laravel所提供的Route::get()方法自己没有找到支持不定参数的写法,不得以才这么写的,这样写的坏处是参数是有长度限制的。不过目录不是很深的话,还是够用了。

ImageRoute.php

这样就大功告成了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值