Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用django+;访问正在进行的上载文件;nginx+;apachemod_wsgi_Django_File_Upload - Fatal编程技术网

使用django+;访问正在进行的上载文件;nginx+;apachemod_wsgi

使用django+;访问正在进行的上载文件;nginx+;apachemod_wsgi,django,file,upload,Django,File,Upload,我知道,当我们上传到使用django的web应用程序时,在服务器完全接收到上传文件之前,我们无法访问它 所以我的问题是,有没有办法检查/访问正在进行的上传文件的总字节 谢谢您可以通过编写自己的Django上载处理程序来监视正在进行的上载。您需要做的只是子类django.core.files.uploadhandler.FileUploadHandler并实现receive\u data\u chunk和file\u complete方法 Django's为您提供所需的详细信息。检查它取决于您的服

我知道,当我们上传到使用django的web应用程序时,在服务器完全接收到上传文件之前,我们无法访问它

所以我的问题是,有没有办法检查/访问正在进行的上传文件的总字节


谢谢

您可以通过编写自己的Django上载处理程序来监视正在进行的上载。您需要做的只是子类
django.core.files.uploadhandler.FileUploadHandler
并实现
receive\u data\u chunk
file\u complete
方法


Django's为您提供所需的详细信息。

检查它取决于您的服务器设置。如果您将Apache与mod_python一起使用,那么文件到达时会流式传输到Django进程。但是,如果您使用wsgi或fastcgi在web服务器后面运行Django,那么在Django参与之前,整个文件将由服务器进行缓冲。那么上面给出的解决方案就行不通了


这是“按设计”的,因为占用fastcgi进程等待文件上传将是一种巨大的浪费。因此,您需要做的是使用一个服务器模块,比如Lighttpd,它在服务器上为您实现upload_进度视图。或者对于nginx。

刚刚找到了一个用于apache的上载进度模块:


我不知道它是如何(或是否)与django&mod_wsgi一起工作的。

在所有文件上传到内存/文件之前,处理程序不会发出任何信号。所以我的问题是我们如何跟踪上传到内存/临时文件的文件字节自定义文件上传处理程序中的receive_data_chunk方法在数据到达时接收数据。。。它不会等到整个文件上传完毕。例如,如果您在前面使用Nginx这样的服务器,它会在上传文件时缓存文件,完成后,它会将上传的文件传递到django实例运行的服务器。您对WSGI的概括是错误的。WSGI是一个接口定义,它有许多实现,它们的行为方式可能有所不同,例如如何更频繁地处理请求内容流,这与它们与web服务器一起使用,而不是与WSGI实现一起使用有关。例如,在Apache/mod_wsgi本身中,请求内容没有缓冲,可以流式传输。您将nginx前端代理粘贴在Apache/mod_wsgi的前面,并且在代理时作为nginx缓冲区进行更改。