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)一样的效果。

<?php
    header('Content-type: image/jpg');
    echo file_get_contents('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

<?php
namespace App\Util;

use Illuminate\Support\Facades\Request;

class ImageRoute
{
    static public function imageStorageRoute(){


        //获取当前的url
        $realpath = str_replace('sysimg/','',Request::path());

        $path = storage_path() . $realpath;



        if(!file_exists($path)){
            //报404错误
            header("HTTP/1.1 404 Not Found");
            header("Status: 404 Not Found");
            exit;
        }
        //输出图片
        header('Content-type: image/jpg');
        echo file_get_contents($path);
        exit;
    }
}

这样就大功告成了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 12,726评论 0 121
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,817评论 0 17
  • Composer Repositories Composer源 Firegento - Magento模块Comp...
    零一间阅读 9,347评论 1 66
  • 必备品文档:DocumentationAPI: API Reference视频:Laracasts速查表:Lara...
    ethanzhang阅读 11,038评论 0 68
  • 深夜里,一个胖女人蜷缩在厨房里,偎依在一个煤气罐旁边。眼泪稀稀疏疏地从从她那胖胖胖的脸颊流过。 桌上乱七八糟的放着...
    通灵半藏阅读 4,140评论 0 0