Symfony2 - Gregwar / Image Bundle - 调整后的图像缓存到S3(Cloudfront)

时间:2015-05-26 08:32:25

标签: symfony amazon-web-services amazon-s3

我想将Amazon Cloudfront服务用作CDN。 我的问题是: 如何让Gregwar / ImageBundle与S3一起使用?

所以这个:

{% set img_path = asset('assets/' ~ app.request.get('product_id') ~ '/images/' ~ contents.background) %}
<img src="{{ web_image(img_path).forceResize(1000) }}" alt="{{contents.title|default('') }}">

生成这个:

https://s3-cdn.com/cache/f/5/f/1/4/f5f1407eb85e38e94019a03082b10611f57b22e5.png

而不是这个: /cache/f/5/f/1/4/f5f1407eb85e38e94019a03082b10611f57b22e5.png(本地fylesystem)

一些更新: 我可以用这个找出资产倾销: Dump Symfony2 assets to Amazon S3 我无法将权限设置为对公众可读。 我在Symfony中为S3(协议)编写了一个流包装器。

Gregwar / ImagineBundle似乎也不支持CDN ...... 当你追踪上传文件夹配置时,你可以看到...告诉我,如果我错了......

其他事情: https://github.com/symfony/symfony/issues/4014

  

关闭直接在S3上生成缓存不会被支持为   还有很多其他方法可以从您所在的计算机上移动文件   生成缓存到S3。

by fabpot

无论如何它被整理出来,因为我可以使用资产:在symfony命令行中安装,只是无法弄清楚使用S3 streamwrapper为上传/生成的资产设置公共访问...

剩下的问题:

  • 使用正确的设置将symfony资产安装/转储到S3 可供公众使用

  • Gregwar / ImageBundle - &gt;生成的图像(即:forceResize(),通常是/ web / cache / ...)到CDN

另一个更新:

  • symfony assetic install / dump - &gt;我决定使用Bower和Grunt来获得相同的结果。仍然不知道如何为命令行添加公共亚马逊ACL事件...对不起,如果你知道的话,在这里添加评论

  • 图片上传 - &gt;我正在&#34;延伸&#34; symfony UploadedFile所以当触发移动文件时,比正式的AWS SDK S3接管进程并处理它...会让你知道解决方案.... [更新]我无法修改移动方法在&#34;标准&#34;或非黑客的方式。所以我创建了一个帮助类(使用SDK)并在正确的位置对其进行了重构。

  • Gregwar / ImageBundle缓存(处理基于Twig&#34的图像;功能&#34;你知道.forceResize)仍然很出色...欢迎任何想法

干杯 格雷格

1 个答案:

答案 0 :(得分:0)

如果https://s3-cdn.com不会改变,你可以为你的src连接它:

 src="https://s3-cdn.com~{{ web_image(img_path).forceResize(1000) }}"

或者使一个twig扩展更清晰或覆盖web_image函数以正确构建你的url并返回正确的url,覆盖它会导致bundle只能用于S3。

更新

这个问题含糊不清,他想上传到S3没有从中读取,这里的树枝无关。

有关上传的更多信息:

github.com/1up-lab/OneupFlysystemBundle/blob/master/Resources / ...这是一个很好的捆绑,它使用联盟/ flysystem看看页面看看他们如何处理上传到amazon flysystem.thephpleague.com/适配器/ AWS-S3-V3