4

我可以从资源文件夹而不是公用文件夹获取并显示图像吗?如果是,我该怎么做?

4

5 回答 5

7

resources文件夹不应该用于store images 这不是公共静态资产(如图像、js、css 等)应该存在的地方。

把它们放在public/文件夹里

resources/assets/目录用于存储pre-processed资产,可以这么说。

例如,如果您有 3 个不同的 CSS 文件,但想要将它们合并为一个并在浏览器中呈现新的单个文件(以提高页面加载速度)。在这种情况下,这 3 个 CSS 文件将放在 resources/assets/ 中的某个位置。

然后这些文件可以是processed,新合并的文件将进入 public。

参考:

https://laracasts.com/discuss/channels/laravel/image-assets?page=1

于 2020-03-10T07:40:24.710 回答
1

您可以创建符号链接:

ln -s /path/to/laravel/resources/images /path/to/laravel/public/images

尽管正如其他用户已经指出的那样,该resource目录并不打算公开使用。

于 2020-03-10T07:54:33.673 回答
1

您可以专门为显示图像制作路线。

Route::get('/resources/app/uploads/{filename}', function($filename){
    $path = resource_path() . '/app/uploads/' . $filename;

    if(!File::exists($path)) {
        return response()->json(['message' => 'Image not found.'], 404);
    }

    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);

    return $response;
});

现在你可以去 localhost/resources/app/uploads/filename.png 它应该显示图像。
参考如何从 Laravel 中的资源中获取图像?
但再说一遍,资源文件夹不应该用于存储图像,这不是公共静态资产(如图像、js、css 等)应该在的地方。正如@sehdev 所说的他的回答..

于 2020-03-10T08:04:33.983 回答
0

回答您的问题在 Laravel 的文档中:https ://laravel.com/docs/5.7/helpers#method-app-path

$path = base_path('resources/path/to/img_dir');

于 2020-03-10T07:38:42.463 回答
0

我同意@sehdev。

但是,如果您仍想从resources目录中提供图像,这里有一个可以完成工作的解决方案。

在您看来:

<img src="/your-image" />

在路线:

Route::get('/your-image', function ()
{
   $filepath = '/path/to/your/file';

    $file = File::get($filepath);
    $type = File::mimeType($filepath);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);
    $response->header("Content-Length", File::size($filepath));
    return $response;
})

这不是最好的解决方案。我建议您将资产移动到公共目录。

编辑:使用 laravel 函数。我建议不要从 url 获取文件路径,因为它可能会受到Directory Traversal的影响。

于 2020-03-10T08:06:35.717 回答