laravel s3尝试屏蔽URL

我有一个无头CMS,它为S3 私有存储桶提供了映像位置。我现在可以使用自定义函数访问这样的图像URL,该函数将每个图像传递到视图,并使用Laravel S3库通过S3进行抓取。

return Storage::cloud()->url($newLink[1]); // This currently works

但是我现在要做的是从视图模板中隐藏返回图像的完整URL。据我了解,我应该使用get函数。然后重新编写一个新的URL。

return Storage::cloud()->get($newLink[1]);

但是在我看来,图像html显示为未知。经过一番研究,我发现用于文件存储的Laravel模块不处理图像的原始数据。另外,我有一些复杂性,因为我不想公开我的存储桶对象。

<img src=(unknown) alt=''/>

更新

我已经解决了上述问题,方法是在控制器内部对来自Storage get请求的原始数据进行编码,然后将返回字符串和解码指令传递给img标签,从而对其进行解码。

$base64 = base64_encode(Storage::cloud()->get($newLink[1]));
return "data:image/png;base64,".$base64;

经过一些研究,我发现默认情况下,用于文件存储的Laravel模块不会处理图像的原始数据。我要实现的是带有SEO友好URL链接的图像。我认为我需要使用类似https://aws.amazon.com/blogs/security/how-to-use-bucket-policies-and-apply-defense-in-depth-to-help-secure-your-amazon-s3-data/的名称。如有任何帮助或朝着正确方向的观点,将不胜感激。

//expected final outcome     
<img src='/image/my-image.jpg' alt=''/>
akongyiji000 回答:laravel s3尝试屏蔽URL

进行更多研究后,我可以选择两种选择。最终,我想确保跨无头架构的存储桶访问权限,同时保持SEO友好上下文和社交媒体链接友好资产。

首先编写一个函数,将图像本地下载到调用S3-bucket的Web服务器。这样做的好处是,如果CMS端的某人意外删除了图像并且无法重新上传,则可以复制资产以提高安全性(只要文件结构保持不变)。但是,不利的一面是复制的数据和成本,这可能应该由S3复制来管理。

第二个是我选择的选项,它是使用我的S3-bucket和自定义子域和SSL来设置一个Cloudfront发行版。在阅读了有关SEO的文章之后,对于同一域HERE上的资产,其子域指向我的存储桶,我不需要使用Laravels存储包来获取图像,因为可以直接引用它们。

对于3 Bucket,我应用了匿名获取策略,以允许任何人链接用于链接友好资产的图像。

{
    "Version": "2008-10-17","Id": "AnonymousGetImages","Statement": [
        {
            "Sid": "Allow-Public-Access-To-Bucket","Effect": "Allow","Principal": "*","Action": "s3:GetObject","Resource": "arn:aws:s3:::*mybucket*/*"
        }
    ]
}

如果有人有不同的处理方式,我会准备就绪。

本文链接:https://www.f2er.com/3168466.html

大家都在问