【发布时间】:2010-10-23 14:36:17
【问题描述】:
我知道,当我们上传到使用 django 的网络应用程序时,我们无法在服务器完全接收上传文件之前访问它。
所以我的问题是,有没有办法检查/访问正在进行的上传文件的总字节数?
谢谢
【问题讨论】:
我知道,当我们上传到使用 django 的网络应用程序时,我们无法在服务器完全接收上传文件之前访问它。
所以我的问题是,有没有办法检查/访问正在进行的上传文件的总字节数?
谢谢
【问题讨论】:
您可以通过编写自己的 Django 上传处理程序来监控正在进行的上传。您需要做的就是继承django.core.files.uploadhandler.FileUploadHandler 并实现receive_data_chunk 和file_complete 方法。
Django 的upload handler documentation 为您提供所需的详细信息。
【讨论】:
这取决于您的服务器设置。如果您将 Apache 与 mod_python 一起使用,则文件在到达时会流式传输到您的 Django 进程。但是如果你在使用 wsgi 或 fastcgi 的 web 服务器后面运行 Django,那么整个文件将在 django 参与之前被服务器缓冲。那么上面给出的解决方案将不起作用。
这是“设计使然”,因为捆绑等待文件上传的 fastcgi 进程将是一种很大的浪费。所以你需要做的是使用一个服务器模块,比如 http://redmine.lighttpd.net/wiki/1/Docs:ModUploadProgress 用于 Lighttpd,它在服务器上为你实现了 upload_progress 视图。或者 http://wiki.nginx.org/NginxHttpUploadProgressModule 用于 nginx。
【讨论】:
刚找到一个apache的上传进度模块:
http://github.com/drogus/apache-upload-progress-module
我不知道它如何(或是否)与 django 和 mod_wsgi 一起工作。
【讨论】: