【问题标题】:django file uploads - move or copy the file?django 文件上传 - 移动或复制文件?
【发布时间】:2012-07-25 20:12:25
【问题描述】:

当我将文件上传到 django 时,它首先通过 UploadHandlers。我用它来写一个进度条。上传完成后,将调用“上传文件”视图。请求对象将具有 InMemoryUploadedFile 或磁盘上的临时文件。

这是我的问题:文档建议逐块复制文件。对于大文件,这不会花费很长时间(进度条停留在 100%)?

进行“移动”操作不是更好吗?例如,在 Windows 上,您几乎可以立即在同一个驱动器号内移动文件,复制需要很长时间。我相信这同样适用于 Unix 系统。

【问题讨论】:

    标签: django file-upload


    【解决方案1】:

    是的,这同样适用于 Unix 系统...其中“驱动器号”更多的是路径,因此您可能会发现 /opt/django/YourApp 和 /opt/django/tmpUploadDir 实际上是两个不同的设备。

    因此,总的来说,相信“移动”并不值得。另一方面,在客户关闭“100% 完成”对话框后,您可以在客户查看过程之外进行复制。

    或者您可以将复制时间计入总百分比。假设您知道复制速度为每秒 1 Mb,并且您观察到网络上传速度以每秒 100 Kb 的速度进行。然后您知道对于 1 GB 文件的总传输时间将是 1100 秒(不是 1000 秒),并且一旦计算出“旧”百分比为 X,您将能够将其显示为 X*DiskSpeed/(DiskSpeed + NetworkSpeed) .当用户上传了 100% 的文件时,他会看到进度条在 91% 处,一直增长到 100% 时,复制也完成了。

    如果您的处理不仅仅是简单的复制,则可以使用最后一种方法,例如如果您正在通过 ffmpeg 重新编码视频。不过,您确实需要事先很好地估计处理时间,否则您最终会得到一个“上传”栏,虽然它是非单调的(即您永远不会看到它从 80% 变为 79%),但会间歇性地进行并开始。

    我的观点是,与上传时间相比,复制时间可以忽略不计,可以放心地忽略。如果不是,那么可能会显示第二个不同的进度条,以便用户看不到任何他/她可能认为“异常”的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      相关资源
      最近更新 更多