【问题标题】:Laravel: Use Linode's Storage Object as an alternative to AWS S3Laravel:使用 Linode 的存储对象作为 AWS S3 的替代品
【发布时间】:2020-08-07 22:45:07
【问题描述】:

Linode 的对象存储被标记为兼容 S3。知道这一点后,我认为我可以简单地在我的 filesystems.php 中使用 Linode 的凭据并使用 ->disk('s3') 上传和下载文件,但显然情况并非如此。

我已按照Laravel's docs 中的建议安装了所有必需的 S3 PHP 包。

我的.env 有:

AWS_ACCESS_KEY_ID=foo
AWS_SECRET_ACCESS_KEY=bar
AWS_DEFAULT_REGION=DE
AWS_BUCKET=my-linode-storage-object.eu-central-1.linodeobjects.com

在日志中我得到Could not resolve host 的异常。它试图将 AWS 端点与我在上面提供的内容连接起来,所以很简单,它不起作用。我应该安装完全不同的包来处理 Linode 的存储对象连接吗?

我在网上没有看到太多关于如何在 Laravel 应用程序中使用 Linode 的存储对象的教程。任何链接或提示将不胜感激。

【问题讨论】:

  • 无法具体评论 Linode,但根据您当前的方法,您的查询将使用 AWS 的 S3 端点。也许必须覆盖它才能使用 Linode 端点?在 boto3 中,您可以使用 endpoint_url 覆盖 boto3 使用的默认端点。 PHP应该有类似的东西?
  • 我对 linode 的了解不多,但我可以提供一些建议。我认为你不应该破解你的代码。除了主机之外,您的环境看起来就像使用 S3。您的代码也看起来像使用 S3。此外,您不应将凭据放入配置文件中。这样想你只会向公众开放你的代码库。问候。

标签: php laravel amazon-web-services amazon-s3 linode


【解决方案1】:

从 laravel 文档中只需安装所需的 Composer 包之一

$ composer require league/flysystem-aws-s3-v3

暂时不要安装 League/flysystem-cached-adapter,因为这需要更多配置。

接下来,在配置文件系统文件config/filesystems.php下添加一个使用s3驱动的新磁盘

'linode' => [
    'driver' => 's3',
    'key' => env('LINODE_KEY'),
    'secret' => env('LINODE_SECRET'),
    'endpoint' => env('LINODE_ENDPOINT'),
    'region' => env('LINODE_REGION'),
    'bucket' => env('LINODE_BUCKET'),
],

将新的环境变量添加到项目的 .env 文件中:

LINODE_KEY="KEYUNDERDOUBLEQUOTES"
LINODE_SECRET="SECRETUNDERDOUBLEQUOTES"
LINODE_ENDPOINT="https://eu-central-1.linodeobjects.com"
LINODE_REGION="eu-central-1"
LINODE_BUCKET="bucket-name"

我通常在 "" 下包含变量以确保它与符号一起使用。在 LINODE_ENDPOINT 下还包括 http 或 https。

现在你已经设置好了所有东西,你现在可以在你的 laravel 代码上使用这个磁盘 ->disk('linode')

【讨论】:

  • 谢谢@charlfields!我一直在努力寻找特定字段的正确格式,但您的帖子帮助了我。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2017-05-26
  • 2017-05-11
  • 2020-05-19
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多