【问题标题】:Laravel 8 and Digitalocean spaces storage uploadLaravel 8 和 Digitalocean 空间存储上传
【发布时间】:2021-11-23 23:14:14
【问题描述】:

有人为 laravel 8 上传到 Digitalocean 空间成功

这是我的作曲家

"laravel/framework": "^8.54",
"league/flysystem-aws-s3-v3": "^1.0",

在文件系统.php中

'spaces' => [
   'driver' => 's3',
   'key' => env('SPACES_ACCESS_KEY_ID', '===AAACESS KEY==='),
   'secret' => env('SPACES_SECRET_ACCESS_KEY', '===BBBSECRECT KEY==='),
   'region' => env('SPACES_DEFAULT_REGION', 'sgp1'),
   'bucket' => env('SPACES_BUCKET', 'laravel-spaces'),
   'url' => env('SPACES_URL', 'https://laravel-spaces.sgp1.cdn.digitaloceanspaces.com'),
   'endpoint' => env('SPACES_ENDPOINT', 'https://sgp1.digitaloceanspaces.com')
],

Tinker 上传测试

$path = 'thumb.png';
$file = Storage::disk('spaces')->put($path, @file_get_contents(public_path('images/logo.png')));

错误

Aws\S3\Exception\S3Exception with message 'Error executing "PutObject" on "https://laravel-spaces.s3.sgp1.amazonaws.com/thumb.png"; AWS HTTP error: cURL error 6: Could not resolve: laravel-spaces.s3.sgp1.amazonaws.com (Domain name not found) (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://laravel-spaces.s3.sgp1.amazonaws.com/thumb.png'
*** Execution finished ***
                              

为什么要将 s3 和 amazonaws.com 附加到 url

以及如何解决这个问题

谢谢。

【问题讨论】:

  • php artisan tinker 中检查config('filesystems.disks.spaces')。确保它显示正确的配置;也许你有一个缓存的?否则我看不出有什么明显的错误。

标签: php laravel amazon-s3 laravel-8 digital-ocean


【解决方案1】:

你的错误告诉你到底是什么问题

Aws\S3\Exception\S3Exception with message 'Error executing "PutObject" on "https://laravel-spaces.s3.sgp1.amazonaws.com/thumb.png"; AWS HTTP error: cURL error 6: Could not resolve: laravel-spaces.s3.sgp1.amazonaws.com (Domain name not found) (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://laravel-spaces.s3.sgp1.amazonaws.com/thumb.png'
*** Execution finished ***

它无法解析 sgp1.amazonaws.com - 这意味着您的 ENV 文件中缺少某些内容。没有看到 env 文件,我无法告诉你。

话虽如此,我知道您在 filesystems.php 中尝试执行的操作 - 但您应该在 ENV 中设置所有变量,无论您将回退设置为什么

【讨论】:

  • 您错过了 OP 问题的重点;他们正在使用 DigitalOcean 的 S3 兼容端点。根据 OP 的配置,它应该放在 sgp1.digitaloceanspaces.com,而不是 s3.sgp1.amazonaws.com
  • @ceejayoz 我没有错过他们的观点。他们有 filesystems.php 设置,但错误仍然是 AWS。需要更多代码进行故障排除和/或我们需要查看 .env 文件
  • 它根本不应该访问 amazonaws.com;这就是endpoint 配置项的用途。它允许将请求指向一个替代的、非 AWS 的、与 S3 兼容的替代端点,例如 DO。见laravel.com/docs/8.x/…。据我所知,OP 在这里做了所有正确的事情。这就是为什么我想知道这是否是缓存配置问题。
  • 哦,这肯定是可能的。 php artisan config:cache 也是我会运行的。达不到这一点 - 我们需要查看您的 ENV 文件。此外,这将有助于查看您正在使用的代码。
【解决方案2】:

感谢大家的帮助。 我解决了问题,问题是 .env 文件配置错误。

这是正确的配置

SPACES_ACCESS_KEY_ID=AAAAA
SPACES_SECRET_ACCESS_KEY=BBBB
SPACES_DEFAULT_REGION=sgp1
SPACES_BUCKET=mybucket
SPACES_ENDPOINT=https://mybucket.sgp1.digitaloceanspaces.com
SPACES_URL=https://mybucket.sgp1.cdn.digitaloceanspaces.com

和配置

'spaces' => [
  'driver' => 's3',
  'key' => env('SPACES_ACCESS_KEY_ID'),
  'secret' => env('SPACES_SECRET_ACCESS_KEY'),
  'region' => env('SPACES_DEFAULT_REGION'),
  'bucket' => env('SPACES_BUCKET'),
  'url' => env('SPACES_URL'),
  'endpoint' => env('SPACES_ENDPOINT'),
  'bucket_endpoint' => true,
  'visibility' => 'public',
],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2021-08-28
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2019-04-03
    • 2021-06-29
    • 2022-01-03
    相关资源
    最近更新 更多