我正在上传图像系统。
您上传图片,然后裁剪并按保存。
如果在上传图像后取消此步骤,图像将保留在服务器上。
因此我尝试在db中创建名为“failImage”的列,因此当您上传图像时,它会在列中存储文件名,例如1111.jpg。
所以稍后如果您通过关闭网站或其他内容取消此过程,下次访问时,我会创建一个函数来检查failImage是否为空。
如果不是,则删除(取消链接)failImage中的值(在此示例中为1111.jpg)并清空failImage列。
这很好用。
但是......如果你有我的网站的两个窗口,并在1)st上传一个图像,然后在第二个你刷新窗口(f5)我做的功能,取消链接值在failImage运行时,当你尝试裁剪并保存它时会发生前一个窗口的错误,因为它没有这样的文件或目录,因为第二个窗口删除了你正在使用的图像。 / p>
我已经考虑过一段时间的解决方案了,有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
如果将其拆分为两个步骤,则可以使此过程更简单,更少出现错误。
步骤:用户上传图片,该图片保存在用户帐户中。
步骤:用户可以选择已上传的图像并裁剪它们。
您将两个步骤严格分开,但为了保持良好的可用性,您不向用户显示这两个步骤。如果步骤1成功完成,则会自动调用步骤2.
答案 1 :(得分:0)
我相信dnagirl的解决方案是正确的,虽然我不确定文件在上传后会在临时目录中存在多长时间。一个可能的替代方法是实现自己的临时目录,并运行一个cron作业,以便在几个小时之后自动清理它。基本上是:
filemtime()
);如果它比截止时间早,则将其删除。如果您不想做所有这些,那么我会说将时间戳编码到failimage列中。
答案 2 :(得分:0)
让我看看我是否理解正确:
要求:
为用户提供数据库中图像的文件名或ID的Cookie。在图像上放置一个时间戳(在数据库中),每隔一段时间检查一次数据库并删除过期的图像。如果用户返回并仍然拥有cookie,则让他们完成编辑图像。由于您不能按照指定使用cron,请执行其他用户所说的操作。根据您拥有的流量以及您想要验证图像“新鲜度”的频率,检查数据库的概率。
如果用户在浏览器中打开新选项卡或窗口,他们将获得已打开的窗口的副本。
这听起来像是可行的吗?
此外,您可以查看IP地址。
答案 3 :(得分:0)
正如您所提到的,当用户使用2个窗口时,它会失败。
即使用户使用2个窗口,如果他们有像userid这样的id,并且图像与该id有一些关系。 您可以检查用户是否已登录。如果用户会话在那里,则删除图像。
检查会话结束时间以查找用户ID和失败图像的状态。
应该工作......
答案 4 :(得分:0)
只有一个1:M
表,允许用户拥有多个加载的图像。然后当你第一次上传,直到你保存它进入该目录。跟踪上次登录的时间,并在此1:M
表上保留第三个字段,用于跟踪文件上传的时间(或转到磁盘并获取时间),然后如果上次登录的时间超过1天前,或某事,删除文件...你真的需要有一个非常明确的工作流程,你不介意你的用户做什么和什么是绝对禁止