2016-07-27 70 views
0

我想上传图片Facebook风格:在提交表单之前选择图片,当他们全部上传时,立即提交表格。我知道如何在前端做到这一点,但问题出在后端。我发现了一些管理后端图像的方法,但我并不满意。所有这些都是避免存储不会使用的照片,例如,如果用户关闭了浏览器,而某些照片已经上传。我想到做上传的3种方式,我不知道这将是最好的:在表单提交之前上传图片Django

  1. 创建“TMP”的目录,并把所有上传的照片在那里,当表单提交的所有移动使用的照片到另一个目录。 (使用此方法可能会出现一些并发问题)
  2. 在我的数据库中创建TempPhoto表格,并执行与上一个解决方案相同的操作,将使用的照片从TempPhoto移动到永久表格。
  3. 将照片直接添加到永久表中,并在预定时间擦除未使用的照片(与其他实体无关)。 (我想这将是更慢的解决方案)

回答

1

我认为你的第一种方式与一些改革是最好的方式。您可以创建tmp目录并为每个图像附加一个独立数据(例如IP地址),以控制并发性,然后在$(window).unload(...)中写入一些脚本,用于向后端发送信号,以便在用户从tmp目录中删除图像时在提交表格之前关闭窗口。

+0

这种方式仍然存在与单个用户并发的问题,想象用户上传许多照片的速度如此之快以至于生成相同的唯一ID(例如IP +“1”)。我该如何在Django中处理这个问题?我在文章中提到的第二种方式处理并发性,你放弃它,因为在表之间移动表项比在目录之间移动要慢? –

+0

实际上,您可以通过添加一些额外的数据(例如图像哈希值或自动增量ID)使其更加独特。在评论中你的问题的答案是YES。我认为这个过程在处理数据库时会比使用'tmp'目录时慢得多。 –