当我将文件上传到django时,它首先通过UploadHandlers。我用它来写一个进度条。上传完成后,将调用“上传文件”视图。请求对象将具有InMemoryUploadedFile或磁盘上的临时文件。
这是我的问题:文档建议按块复制文件块。对于大文件,这不会花费很长时间(进度条卡在100%)?
进行“移动”操作会不会更好?例如,在Windows上,您可以在同一个驱动器盘符内几乎立即移动文件,复制需要很长时间。我相信这同样适用于unix系统。
答案 0 :(得分: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%),但它会在适合的情况下进展并开始。
我的意见是,与上传时间相比,复制时间可以忽略不计,可以安全地忽略。如果不是,那么可能会显示第二个不同的进度条,以便用户看不到任何他/她可能认为“异常”的内容。