Symfony4-存储上传文件的良好实践

时间:2018-11-11 06:25:02

标签: git symfony upload

在我正在开发的Web应用程序中,客户端将上传很多小图片(从后端视图),这些图片将显示在用户前端。

当前,我将所有图片存储在这里:

backgrounds_directory: '%kernel.project_dir%/public/uploads/backgrounds'
decorations_directory: '%kernel.project_dir%/public/uploads/decorations'
templates_directory: '%kernel.project_dir%/public/uploads/templates'

因此,它们实际上位于S4项目中。当我使用GIT对项目进行版本控制时,这些上载将不会与我的开发版本同步。

最佳做法是什么?

  • 将它们存储在S4项目之外的某个地方,然后每小时进行一次GIT提交cronjob吗?
  • 像在亚马逊S3服务器上一样,将图片存储在symfony中,并且仅将图片的ID存储在我的数据库中,以便以后进行检索吗?
  • GIT会忽略此存储库并定期备份吗?
  • 在数据库中保存图片的base64吗?

我不确定如何选择曲目。我猜有很多选择。如果您有经验,我想提一些建议。

2 个答案:

答案 0 :(得分:0)

主要取决于您的需求和对应用程序的要求。我将描述我正在使用的解决方案。

首先,我使用FlySystem抽象文件系统操作,该操作允许在S3,本地文件系统或其他任何东西之间轻松切换(在我的配置中,我在开发环境中已映射到本地文件系统,而生产通常映射到S3)。 / p>

用于上传的文件夹应该在git中确定被忽略。 Git可以存储更多的文本信息,而图像却不能很好地跟踪更改等。

在应用程序发生错误或遭受任何攻击时,您仍然需要制定备份解决方案(我们还将S3内容也备份到其他存储桶中)。

对数据库解决方案的评论:这可能是可行的方法,但实际上取决于您的需求和数据库的选择。但是绝对不要使用base64,但是通常数据库具有类似BLOB / Binary数据类型的东西,这是更好的选择。

答案 1 :(得分:0)

由于用户数据可能还取决于数据库,因此我不会将这些文件添加到您的开发Git存储库中。 Git存储库应该用于应用程序的源代码,而不用于用户数据。

上传到哪里也取决于您的要求。最简单的方法是目前如何将文件本地存储在运行应用程序的Web服务器上。仅当您拥有的文件多于托管存储空间或在多台服务器上运行应用程序时,这才是问题。在这种情况下,将它们存储在外部服务(例如Amazon S3)上是有意义的。但这当然会使事情变得更加复杂(外部服务,成本,集成等)

如果需要不时将开发环境与生产版本同步,则可以使用rsync将新文件或更改的文件复制到环境中。当然,这不会替代适当的备份,后者应直接在生产服务器上设置并包括数据库。