laravel 5.1如何在视图中使用Storage-> get()

时间:2016-04-23 13:21:42

标签: laravel laravel-5.1

我需要在storage / app / folder / file.ex中加载我的文件,然后使用Storage。但是图像源有问题。 enter image description here

<img src="{{ \Illuminate\Support\Facades\Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix() . $article->singer_id . '\\' . $article->img}}" >

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果要在视图中使用图像,则应首先将其移动到public目录(或其中一个子目录)。

然后你可以使用它:

<img src="{{ asset('img/'.$article->img) }}">

此外,请确保您具有正确的Apache配置,并且它指向public directory of a Laravel project. For example, if you've uploaded your Laravel projecy to a c:/ wamp / www`,请使用以下设置:

DocumentRoot "C:/wamp/www/public"
<Directory "C:/wamp/www/public">

答案 1 :(得分:0)

我个人也喜欢将我的图像保存在存储文件夹中,原因有很多:

  • 我控制访问权限,某些图片可能只在网站的封闭部分提供。
  • 它允许我在将图像发送到浏览器之前修改图像(比例,水印......)。
  • 用户上传的文件(通过CMS或其他内容)不应直接公开访问,因为这可能会产生安全风险。
  • 将它们从我的git存储库中删除要容易得多,我只是忽略整个/ storage文件夹。

要使它们可访问,您需要通过某种ImageController发送请求。这需要能够做至少两件事:

  • 根据路径中提供的某种slug或文件名找到实际的图像文件。
  • 使用所有相应的标题发送回复,以便浏览器知道它正在处理图像。

第一部分我留给你。我的代码实际上使用数据库表来存储图像信息,并使用实际图像文件进行大量操作来调整大小和填充内容。

实际发送图像有点复杂,因为您需要考虑一些缓存处理,所以让我分享一下我如何处理:

protected function sendImage(FilesystemAdapter $storage, $file)
    {
        $data = $storage->get($file);
        $response = response($data)
            ->header('Content-Type', $storage->mimeType($file));

        // Cache for 5 HOURS
        $response->setExpires(Carbon::createFromTimestamp(time() + (60*60*5)));

        //header('Last-Modified: ' . $lastModified);
        $response->setLastModified(Carbon::createFromTimestamp($storage->lastModified($file)));

        //header('ETag: ' . $eTag);
        // https://en.wikipedia.org/wiki/HTTP_ETag
        $response->setEtag(md5($data));

        $notModified = false;
        $lastModified = $response->getLastModified();
        $modifiedSince = \Request::header('If-Modified-Since');

        if (!is_null($modifiedSince)) {
            // Check the etag header
            if ($etags = \Request::header('etag')) {
                $notModified = in_array($response->getEtag(), $etags) || in_array('*', $etags);
            }

            // Check if the image is not modified since the latest cache
            if ($modifiedSince && $lastModified) {
                $notModified = strtotime($modifiedSince) >= $lastModified->getTimestamp() && (!$etags || $notModified);
            }

            // If so, send a 'not modified' response
            if ($notModified) {
                $response->setNotModified();
            }
        }

        return $response;
    }

希望这会有所帮助。随意请求进一步解释。