[Flask] File upload breaks for files with size >64kb on ARM based apache wsgi servers

Michael Bayer lists at mjbayer.de
Wed Oct 3 12:35:18 EDT 2018


Hi Scott,

thanks a lot for the suggestion to save it in chunks. I like the 
approach and I will take it over :)

Unfortunately it did not resolve the issue, I still get the Bad request 
error.

On the Raspi, I have your version in place.

Best regards,

Michael


Am 03.10.2018 um 16:47 schrieb Scott Werner:
> Michael,
>
> Is it possible that the uploaded file size is causing the server to 
> run out of memory when saving? You can try saving it in chunks:
>
> def read_in_chunks(file_object, block_size=1024):
>     """Return a generator which yields data in chunks.
>
>     Source: `read-file-in-chunks-ram-usage-read-strings-from-binary-file
>     <http://stackoverflow.com/questions/17056382/
> read-file-in-chunks-ram-usage-read-strings-from-binary-files>`_
>
>     :param file_object: File object to read in chunks.
>     :type file_object: file object
>
>     :param block_size: (optional) Chunk size.
>     :type block_size: int
>
>     :yield: The next chunk in file object.
>     :yield type: `bytes`
>     """
>     for chunk in iter(lambda: file_object.read(block_size), b''):
>         yield chunk
>
> @app.route("/add", methods=["GET", "POST"])
> def add():
>     ...
>     # gpx_file.save(gpx_fspath)
> with open(gpx_fspath, 'wb') as file_:
>         for data in read_in_chunks(gpx_file.stream):
>             file_.write(data)
>
> https://github.com/scottwernervt/flask-upload-issue-arm/blob/master/views.py
>
> On Wed, Oct 3, 2018 at 9:42 AM Michael Bayer <lists at mjbayer.de 
> <mailto:lists at mjbayer.de>> wrote:
>
>
>     Am 02.10.2018 um 23:39 schrieb Geert Stappers:
>>     On Tue, Oct 02, 2018 at 05:05:47PM +0200, Michael Bayer wrote:
>>>     Hi everyone,
>>>
>>>     I discovered a funny behavior of my flask app, when running on ARM
>>>     based apache wsgi servers. Could you please give me some hints to
>>>     debug this?
>>>
>>>     I have a flask application, that supports file upload.
>>>     It runs on an ARM based debian stable server with apache wsgi.
>>>     If I upload small files, everything is fine. The problem appears,
>>>     when I upload files with a file size >64kb. The famous "Bad request
>>>     - The browser (or proxy) sent a request that this server could not
>>>     understand." pops up.
>>>
>>>     Things I tried out so far:
>>>     - Deploying my flask app to my productive ARM based webserver
>>>     (debian
>>>        stable): Here I discovered the issue.
>>>     - Running in flask's development wsgi server on my Development PC:
>>>         No problem, I can upload files with any size I want.
>>>     - Clean debian stable installation in a virtualbox on my
>>>     Development
>>>        PC (AMD64) same packages as my productive server, but AMD64
>>>     instead
>>>        of armhf (apache, mod_wsgi): Again no problems at all.
>>>     - Clean installation of raspian on a spare ARM Raspberry Pi
>>>     (based on
>>>        debian 9) with apache, mod_wsgi: Here comes the problem again!
>>>     - Increase apache LogLevel to debug -> no error logged
>>>     - Activate FileLogging inside my flask app -> no error logged
>>>
>>>     Have you seen anything like this?
>>     No.
>>
>>     Thing that intriges me, is that 64K   is a 16-bit limit.
>>     ARMHF versus AMD64  is 32-bit vs 64-bit ...
>     Thanks for your answer!
>     Yes, this is strange. I also don't have an explanation
>>
>>>     I unfortunately do not have much experience with web
>>>     servers/development
>>>     so I'm stuck with my debugging approaches :/
>>>
>>>     What could I do besides that?
>>     Consider it a none flask problem, it will allow you to look at
>>     Apache,
>>     uWSGI, Python and other links in the chain. Is a webproxy involved??
>
>     There is no proxy in the network.
>
>
>>>     What information do you need from my side?
>>>     I can provide any code/configuration you need.
>>     That will help reproducing the problem.
>     I created a minimal example to reproduce the error:
>     https://github.com/mjbayer/flask-upload-issue-arm
>
>     This repo contains code, configuration and example files that can
>     be used for upload.
>
>     Here is a demo Raspberry Pi (just for that purpose) to try it out:
>     http://rgb.mjbayer.de/trackdb/
>     (I could also give ssh access to the Raspi if required)
>
>     If you run the code in flasks development wsgi server or apache
>     mod_wsgi on AMD64, you will not see the issue.
>
>
>     Michael
>
>     _______________________________________________
>     Flask mailing list
>     Flask at python.org <mailto:Flask at python.org>
>     https://mail.python.org/mailman/listinfo/flask
>
>
>
> -- 
> Scott Werner
> scott.werner.vt at gmail.com <mailto:scott.werner.vt at gmail.com>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/flask/attachments/20181003/5a697979/attachment.html>


More information about the Flask mailing list