Laravel和AWS Cloudfront

11

我正在研究一个特定的主题,读了很多文章,但无法找到相关答案。

然而,我在Laravel上做了一些有趣的/私人项目,想使用Amazon S3存储。我已经设置好了一切,它也正常工作,我能够使用Laravel文件系统将图像上传到S3,但是我想做的是使用CloudFront(我也已经设置好和工作了,cloudfront正在正确地提供文件)来提供图片和文件。

现在我的问题是:如何将AWS CloudFront“URL”集成到Laravel中?我的意思是如何在Laravel应用程序中存储CloudFront URL?如何检索文件URL(即图像),以便我可以在我的应用程序中显示它。我是在数据库中仅存储文件路径并使用“某种具体方式”来提供完整URL,还是将完整的AWS CloudFront URL保存在数据库中?

这到底是如何工作的?如果问题很愚蠢,请原谅,因为我刚开始接触Laravel,还很新手。

2个回答

16

请在config/filesystems/s3中将url设置为您的CloudFront URL。

's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => 'http://xxx.cloudfront.net']

它在L5.5中有效。


1
我设置了'url',但它仍然返回S3的URL,而不是CloudFront的URL。我正在使用L5.5。 - Quy Nguyen Vu
使用L5.6。根据Illuminate\Filesystem\FilesystemAdapter.php中的getAwsUrl(),这个解决方案似乎应该有效,但配置似乎没有生效。可能缓存系统出了问题吗?还有什么其他原因呢?在getAwsUrl()中添加dd()语句进行调试甚至都没有执行到。 - dhildreth
啊,好的,你需要使用 Storage::url('file.jpg')。这将反映出 url 设置。谢谢! - dhildreth

3
你可以使用这个包:https://github.com/publiux/laravelcdn 这是一款用于Laravel的内容传递网络包,它使开发者可以通过单个Artisan命令将他的资源(或任何公共文件)上传到CDN,并允许他在本地与在线文件版本之间进行切换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接