从资源文件夹中获取图像 - Laravel

Posted

技术标签:

【中文标题】从资源文件夹中获取图像 - Laravel【英文标题】:Get image from resources folder - Laravel 【发布时间】:2020-06-22 02:05:44 【问题描述】:

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

【问题讨论】:

laravel.com/docs/7.x/filesystem#the-public-disk 【参考方案1】:

我同意@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 的影响。

【讨论】:

【参考方案2】:

您可以制作专门用于显示图像的路线。

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 并且它应该显示图像。参考How to get image from resources in Laravel? 但再说一遍,资源文件夹不应该用于存储图像,这不是公共静态资产(如图像、js、css 等)应该在的地方。正如@sehdev 所说的那样。

【讨论】:

我建议不要从url中取文件名,它可能会受到目录遍历的影响。 owasp.org/www-community/attacks/Path_Traversal【参考方案3】:

您可以创建符号链接:

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

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

【讨论】:

【参考方案4】:

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

将它们放在public/文件夹中

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

例如,如果您有 3 个不同的 CSS 文件但想要合并它们 成一个并在浏览器中呈现该新的单个文件(以增加 页面加载速度)。在这种情况下,将放置 3 个 CSS 文件 在资源/资产/中的某个地方。

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

参考:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于从资源文件夹中获取图像 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Bundle 中获取 PNG 文件的资源路径?

iOS - 将特定图像从捆绑资源路径复制到 Documents Dir

Lumen:刚刚安装了lumen,无法从公用文件夹中获取资源

C++ GDI+如何从资源中获取和加载图像?

Laravel 5.0 文件夹结构:公共与资源

android - 从库中获取资源ID