返回

Laravel temporaryUrl 函数解析:每次调用都向 AWS 发起请求吗?

php

在 Laravel 中使用 temporaryUrl 函数获取私有文件的临时 URL

概述

在 Laravel 中,temporaryUrl 函数用于生成私有文件的临时 URL。该 URL 在指定的时间段内有效。本文将深入探讨 temporaryUrl 函数,解决其每次调用是否向 AWS 发起请求的问题,并提供优化临时 URL 获取的方法。

temporaryUrl 函数详解

temporaryUrl 函数向 AWS 发起请求以获取私有文件的临时 URL。这是因为它使用 AWS SDK 来创建经过签名的 URL,允许用户在一段时间内访问该文件。每次调用 temporaryUrl 函数都会生成一个新的签名 URL。

优化临时 URL 获取

为了优化临时 URL 的获取,我们可以采取以下措施:

  • 批量获取: 一次获取大量文件的临时 URL,而不是逐个获取。
  • 缓存: 将获取的临时 URL 存储在缓存中,以便快速访问。
  • 定期刷新: 定期刷新到期的临时 URL,确保始终拥有最新的 URL。

创建刷新命令

我们可以创建一个 Artisan 命令来刷新临时 URL:

// RefreshTemporaryUrlsCommand.php
use Illuminate\Console\Command;
use Aws\S3\S3Client;

class RefreshTemporaryUrlsCommand extends Command
{
    protected $signature = 'media:refresh-temporary-urls';

    public function handle()
    {
        // 获取私有文件
        $files = Media::where('disk', 's3')->get();

        // 刷新临时 URL
        foreach ($files as $file) {
            $temporaryUrl = $s3Client->getObjectUrl($file->bucket, $file->path, [
                'Expires' => now()->addMinutes(60),
            ]);
            
            $file->temporary_url = $temporaryUrl;
            $file->save();
        }
        
        // 提示刷新完成
        $this->info('Temporary URLs have been refreshed.');
    }
}

结论

temporaryUrl 函数每次调用都会向 AWS 发起请求以获取临时 URL。通过批量获取、缓存和定期刷新,我们可以优化临时 URL 的获取。Artisan 命令可以帮助我们自动执行刷新过程,从而进一步提高效率。

常见问题解答

1. temporaryUrl 函数是否每次都会向 AWS 发起请求?

是的,每次调用 temporaryUrl 函数都会向 AWS 发起请求以获取新的签名 URL。

2. 为什么每次调用 temporaryUrl 函数都要向 AWS 发起请求?

这是因为临时 URL 具有有限的有效期。temporaryUrl 函数使用 AWS SDK 创建经过签名的 URL,该 URL 在一段时间内允许用户访问该文件。

3. 如何优化 temporaryUrl 函数的获取?

可以通过以下方式优化 temporaryUrl 函数的获取:批量获取、缓存和定期刷新。

4. 我应该使用临时 URL 还是永久 URL?

临时 URL 适用于需要限制访问或生成一次性下载链接的情况。永久 URL 适用于需要长期访问文件的情况。

5. 如何刷新到期的 temporaryUrl?

我们可以使用 Artisan 命令或手动刷新到期的 temporaryUrl。