1

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

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

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

4

1 回答 1

0

是的,这同样适用于 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%),但会断断续续地进行并开始。

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

于 2012-07-25T12:12:25.513 回答