On 30 Cze, 03:51, Graham Dumpleton <
Graham.Dumple...@gmail.com> wrote:
> You may have to to ask the author of nginx mod_wsgi whether streaming
> uploads is even possible.
>
> I vaguely remember from discussions, that due to nginx mod_wsgi being
> an event driven system, rather than using a threaded model, that it
> may have to read complete request content into memory or onto disk
> before it even executes the application. If it is into memory, then
> what you are trying to do may not help as far as memory usage.
>
> Graham
i have just consulted this issue with author of mod_wsgi and that
looks a little bit different. nginx does not cache whole the request
body in memory but instead (depending on size) makes use of temporary
file. please take a look at 'client_body_buffer_size' parameter if you
are interested in details.
at last i also managed to get rid of "413 Entity too large" error. it
was enough to increase 'client_max_body_size' parameter in nginx
config.
but i'm still unsure of one thing. while uploading small files i get
in request.FILES instance of InMemoryUploadedFile, for large files
this is TemporaryUploadedFile and that looks correct. Following is
what documentation says about uploaded files handling:
,----[
http://code.djangoproject.com/git/?p=django;a=blob_plain;f=docs/
upload_handling.txt;hb=refs/heads/2070-streaming-uploads]
|
| Putting it all together, here's a common way you might handle an
uploaded file::
|
| def handle_uploaded_file(f):
| destination = open('some/file/name.txt', 'wb')
| for chunk in f.chunks():
| destination.write(chunk)
`----
and that is true for InMemoryUploadedFile as it has a chunks() method.
TemporaryUploadedFile does not have this method, so I cannot use above
snippet to handle both of them, or am i wrong? if so, what is the
'right' way to move uploaded file (no matter if it is InMemory- or
Temporary- uploaded) to defined directory?
thanks,
jm.