laravel中通过url访问存储在storage下面的图片

那天和别个小组交叉检查代码的时候,看到他们的图片是通过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

这样就大功告成了!

你可能感兴趣的:(laravel中通过url访问存储在storage下面的图片)