我的问题更多的是建筑问题,而不是真正的问题。
的 MODEL 的
此时我有一个实体和一组图像(图像实体)附加到它们(@ManyToMany)。
查看 的
实际上我在生产中运行了一些稳定的代码,但这是维护的噩梦。 我正在使用Js和Ajax。 Js正在侦听假的多输入并将图像发送到Symfony。此时,Symfony2正在创建一个虚假的临时文件夹,并在图像中添加(巨大的代码片段)。
我不认为没有ajax和js就不能正常运行(记住我们无法更改输入文件值)而且如果用户想要拖动广告投放图像而不是我也使用布局框手动添加。
的 CONTROLLER 的
提交真实表单后,控制器正在检查此临时文件夹中的文件并将其添加到实体的图像集合中(我不认为这是正确的方法)并从临时文件夹中移动图像到S3盒子。
的问题 的
有什么想法以不同的方式管理这个问题?可能避免将图像存储在临时文件夹中或/并正确使用Symfony2表单和Doctrine Listeners / postUpdate-postPersist。
答案 0 :(得分:2)
我之前遇到过这个问题并且没有办法解决它:如果你想异步上传图像(AJAX),在某些时候你将不得不将它们存储在某种临时文件夹中。当用户上传某些内容但未完成其余表单并离开页面时,这会产生众所周知的问题。您需要某种机制来删除“孤立”图像,这些图像不属于任何已完成的请求,只是位于临时文件夹中。
有一个我一直在广泛使用的捆绑包,它允许这一点。它提供了一种使用您需要的任何AJAX解决方案(或自己创建)来处理文件上传的简单方法,还提供了一个很好的文件系统抽象(可用于将图像存储在S3存储桶中)。但最酷的功能是orphanage
,它允许您通过运行命令来清除临时上传但未使用的图像。然后,只需使用此命令执行cron来定期清理文件夹。
这是捆绑:https://github.com/1up-lab/OneupUploaderBundle
您可以轻松地将其与Symfony集成,只需要考虑到您将要执行2个操作,一个是异步上传图像(可以是表单或不是表单),另一个是处理真实表单。将它们放在一起是微不足道的,只需确保使用会话,文件系统文件夹或数据库中的表来跟踪临时上载的图像。
答案 1 :(得分:0)
我也遇到过这个问题,正如阿尔贝托所说,没有解决方法。
我没有移动临时文件夹中的文件,而是将它们移到远处的右侧文件夹中。当然,存在未使用的存储文件的问题,因为即使用户没有结束整个表单,显然也会上传文件。
我个人也非常不喜欢这种方法,我解决了它构建一个函数,删除我每天由cron作业运行的服务器上的未使用文件。
0 0 * * * /usr/local/bin/php /path/to/symfonyproject/Tasks/CleanFiles.php
在我看来,这很脏,在我疯了之后,我发现没有其他选择。