我应该如何使用 Laravel 提供图像?

2024-03-15

我将用户个人资料图片存储在 laravel 存储文件夹而不是公共文件夹中,因为我想保持公共文件夹干净,避免用户混乱。

为了从该文件夹提供图像,我创建了一个简单的控制器操作,如下所示:

public function profilePicture($person, $size = 40){
    $profile_picture_url = storage_path().'/profile_pictures/'.$person['id'].'/profile_'.$size.'.jpg';

    if(!File::exists( $profile_picture_url ))
        App::abort(404);

    return Image::make($profile_picture_url)->response('jpg');
}

这可以被认为是一个好的做法,还是我应该简单地将图片保存在公共文件夹中? 这样做会遇到性能问题吗?


对您问题的简短回答

这可以被认为是一个好的做法,还是我应该简单地保存 公共文件夹中的图片?我会遇到性能问题吗 这样做?

这不是建议的做法,因为您读取文件并重新生成它,这将花费处理时间并加载服务器,但这一切都取决于请求数量、图像大小等。我使用这种做法来保护/保护来自公共访问的图像/文件,因此只有经过身份验证的会员才能访问此中的图像/文件answer https://stackoverflow.com/questions/30682421/how-to-protect-image-from-public-view-in-laravel-5/30682456#30682456。再次取决于文件大小、请求数量和服务器规格,我已经使用它一段时间了,并且没有遇到性能问题,它工作得很好(我的服务器是 512MB 内存、1 个核心处理器、20GBSSD 磁盘 VPS 解决方案)。你可以尝试一下,然后看看。

符号链接解决方案

也可以创建符号链接,例如

ln -s /pathof/laravel/storage/profile_pictures /pathof/laravel/public/profile

此解决方案不会影响性能,但您需要在内部文档中记录该解决方案,以防您将设置移至新的提供商或需要重新链接到存储文件夹。

但是如果你仍然希望有从存储文件夹返回图像的完整解决方案,首先我们需要安装 Laravel 的干预图像,我不确定这是否已经完成。如果您已安装它,请继续此处,但如果没有按照此答案的最后部分进行操作,则继续使用 Laravel 解决方案。

Laravel 解决方案

正如我们所说,我们假设您的干预有效,首先您需要创建一条路线。该路由会将所有图像请求访问转发到我们的控制器。

创建路线

Route::get('profile/{person}', 'ImagesController@profilePicture');

创建路线后,我们需要创建一个控制器来处理来自路线的图像请求。

创建图像控制器

来自命令

php artisan make:controller ImagesController

你的控制器应该看起来像这样。

class ImagesController extends Controller {

    public function profilePicture($person, $size = 40)
    {
        $storagePath = storage_path('/profile_pictures/' . $person . '/profile_' . $size . '.jpg');

        return Image::make($storagePath)->response();
    }
}

EDIT

对于那些使用 Laravel 5.2 及更高版本的人。 Laravel 引入了新的、更好的方法提供文件 https://laravel.com/docs/master/responses#file-responses开销较小(这种方式不会重新生成答案中提到的文件):

文件回应

file 方法可用于显示文件,例如图像或 PDF,直接在用户的浏览器中而不是启动下载。 此方法接受文件的路径作为其第一个参数和一个 标头数组作为第二个参数:

return response()->file($pathToFile);

return response()->file($pathToFile, $headers);

并且记得添加

use Intervention\Image\Facades\Image;

in your ImagesController class

最后确保您已经创建了包含测试图像的文件夹结构。

storage/profile_pictures/person/profile_40.jpg

现在如果你在浏览器中写入

http://laravelLocalhostUrl/profile/person

It will show your image, I have made it my self and test it. enter image description here

注意:我已尽力使文件夹反映您的问题, 但您可以轻松修改它以适合您想要的方式。


安装干预(如果您已经安装,请跳过此部分)

请遵循以下指南:http://image.intervention.io/getting_started/installation http://image.intervention.io/getting_started/installation

简要地:php composer require intervention/image

并在你的config/app$providers 数组添加此包的服务提供者。

Intervention\Image\ImageServiceProvider::class

将此包的外观添加到 $aliases 数组中。

'Image' => Intervention\Image\Facades\Image::class

解决方案的灵感来源于此answer https://stackoverflow.com/questions/30682421/how-to-protect-image-from-public-view-in-laravel-5/30682456#30682456但这是通过一般身份验证来保护图像,这answer https://stackoverflow.com/questions/30191330/laravel-5-how-to-access-image-uploaded-in-storage-within-view.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何使用 Laravel 提供图像? 的相关文章

  • mclapply 用户时间大于已用时间

    我正在尝试使用mclapply的功能parallel封装在R 该函数通过计算对数似然距离将值分配给序列矩阵 这是一个 CPU 密集型操作 所结果的system time价值观令人困惑 gt system time mclapply work
  • Yajra DataTable Laravel 中的 Foreach

    我试图在我的数据表中放入一个 foreach 循环 但它不起作用 附 如果我删除 foreach 一切都已经正常了 这里附上我的代码 Product Product query colors Color all return Datatab
  • Laravel 7.x eloquent addSelect 子查询来计数

    与 一起工作Laravel 7 x and Postgresql 我有一个User类和GroupPivot数据透视表 可以对多个模型进行分组 我想创建一个专栏User如果用户拥有针对该组的当前数据透视条目 则为 true 或 false 类
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • Symfony2 实体字段在选项为空时显示所有条目

    我的 Symfony2 项目中有一个实体类型表单字段 builder this gt createFormBuilder projects this gt getProjects builder gt add project entity
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何优化 R 中的 sapply 来计算数据帧上的运行总计

    我在 R 中编写了一个函数来按月份计算累积总数 但随着数据集变大 我的方法的执行时间呈指数增长 我是一名 R 程序员新手 你能帮我提高效率吗 该函数以及我调用该函数的方式 accumulate lt function recordnum d
  • 如何通过开始索引和结束索引提取子字符串?

    str HelloWorld sub substr str 3 5 echo sub prints loWor 我知道 substr 采用第一个参数 第二个参数是开始索引 而第三个参数是要提取的子字符串长度 我需要的是通过提取子字符串起始索
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • PHP cURL 看不到 /etc/hosts 文件

    我在让 PHP cURL 库识别我在我的文件中创建的别名时遇到了麻烦 etc hosts file 这就是我的 etc hosts现在归档 192 168 0 20 www example dev 在另一端 192 168 0 20 Apa
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 无法访问 WordPress 中声明的全局变量

    我有以下代码 g value something print g value function get value global g value print g value print get value 当我在独立的 PHP 脚本中运行它
  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii

随机推荐

  • Visual Studio 展开/折叠键盘快捷键[重复]

    这个问题在这里已经有答案了 In Visual Studio if I have a code file open I can press CTRL M or CTRL M O to collapse all code blocks reg
  • 为什么这个类有两个构造函数?

    我在旨在说明构造函数的幻灯片中看到了这一点 我现在很困惑 因为它有两个具有相同工作的构造函数 接受在第二个构造函数中将 gpa 设置为零 为什么编码器需要重复this id id this name name 再次 为什么这个类需要两个构造
  • 来自 Python 的 AWS 网络负载均衡器后面的客户端 IP

    当在网络负载均衡器后面运行套接字服务器时 实例由 IP 指定 server sock socket socket family socket AF INET type socket SOCK STREAM proto socket IPPR
  • InvalidArgumentError:索引[0,0] = -1 不在 [0, 10) 中

    它与 MLP 一起进行二元分类效果很好 然而 在 LSTM 和卷积中 它给出了InvalidArgumentError 我发现 y 需要重塑 我就这么做了 我尝试了 x 的所有正值 并且模型运行良好 那么负值有什么问题呢 数据在代码中给出
  • Android 应用程序使用 android.permission.READ_LOGS - 这是不礼貌的吗?

    我有一个可以从 Android Market 获取的应用程序 一些用户要求在事情没有按预期进行时进行调试 我一直在考虑添加一个菜单项来显示输出 Process mLogcatProc null BufferedReader reader n
  • Dagger2:用组件本身注入模块提供的实现类

    考虑到模块都是通过 Dagger1 规范相互共享的complete false library true 您可以收到由 Provides通过构造函数参数的方法 就像这样 public class GetUserForUsernameTask
  • 如何计算列表中项目的出现次数

    我是 Dart 新手 目前我有一个重复项目列表 我想计算它们的出现次数并将其存储在地图中 var elements a b c d e a b c f g h h h e a 我想要得到这样的结果 a 3 b 2 c 2 d 2 e 2 f
  • 格式 - 帮助打印表格

    这个问题可能会以捂脸结束 但我已经尝试了一段时间 尽管阅读了超规范 但仍然卡住了 基本上我想做的是 format t 5d 1 23 2 312 23 456 1 7890 但不应该对 5 进行硬编码 而是应该从列表中计算 任何嵌套列表中最
  • 从 ANDROID 2.2 发送 UDP 包(HTC 希望)

    我有一个局域网 我想从我的 android htcdesire 发送一条 udp 消息到我的电脑 它们之间有一个 WLAN 路由器 问题是 UPD 消息永远不会到达 PC Android上的代码 package org example an
  • JSON 架构允许日期或空字符串

    我需要定义一个 JSON 模式 其中输入可以是日期或空字符串 我当前的 JSON 架构是 type object required FirstName DateOfBirth properties FirstName type string
  • R - 自动调整 Excel 列宽

    如何使用自动调整列宽openxlsx 我的其中一列有一个日期变量 例如21 08 2017 并且如果使用复制ctrl c从 Excel 中 并正常粘贴到其他地方 它显示为 如果增加列宽以显示 Excel 中的内容 则可以正常粘贴 我想将重复
  • 在 d3 中设置 id 问题

    这就是我正在做的 selection canvas selectAll circle data mydata selection enter append circle selection attr id function d i var
  • Scala - Slick - 获取包装选项的 TypedType[T]

    通常创建这样的自定义 ID case class CustomID value Int extends MappedTo Int 并用 Option CustomID 等类型表示可为 null 的自定义 ID 但是 我希望能够将 Optio
  • 为什么 >= 有效但 => 无效?

    当检查一个整数是否等于或大于当前数字时 所以我输入 if 5 gt 6 Bla 但它显示这是一个错误 为什么 这不是完全一样吗 if 5 gt 6 Bla 它不起作用的原因是因为 gt 不等于 gt gt 用于拉姆达表达式 http msd
  • Nil 和 List 作为 Scala 中的 case 表达式

    此代码编译 def wtf arg Any arg match case Nil gt Nil was passed to arg case List gt List was passed to arg case gt otherwise
  • Java - split(regex, limit) 方法实际上如何工作? [复制]

    这个问题在这里已经有答案了 我试图了解 split 方法的工作原理 但对此有些困惑 在 oracle 文档页面给出的这个示例中 String str boo and foo String str1 str split o 2 Output
  • 如何在 AWS Lambda 函数中获取 AWS API Gateway 调用 URL?

    我正在将代理集成与 Java lambda 函数结合使用 lambda 处理程序的输入是一个表示传入请求的 JSON 对象 它有正文 标头 查询参数等 但它不包括 API 网关解析的正文的源 URL 查询参数等 有没有办法获取它 问题是 A
  • 姜戈树胡子 AL、NS、MP 之间有什么区别

    我正在尝试制作一个模型来对某些对象进行分类 我已经尝试使用 django mptt 轻松检索相关类别 现在我正在搜索不同的解决方案以找到最好的解决方案 我无法找出物化路径 邻接列表和嵌套集之间的主要区别 维基百科没有给我一个简短的答案 我所
  • 在 VB.Net 中获取 COM 对象的特定实例

    我正在 Net 中编写一个 Windows 窗体应用程序 以列出第三方 CAD CAM 软件 在本例中为 CATIA 的所有正在运行的实例 并让用户选择其中一个来执行几个自动化任务 为了执行自动化任务 我需要获取 COM 对象的特定实例 与
  • 我应该如何使用 Laravel 提供图像?

    我将用户个人资料图片存储在 laravel 存储文件夹而不是公共文件夹中 因为我想保持公共文件夹干净 避免用户混乱 为了从该文件夹提供图像 我创建了一个简单的控制器操作 如下所示 public function profilePicture