]> git.p6c8.net - jirafeau.git/commitdiff
[BUGFIX] lower POST size when ̀PHP's upload_max_filesize is too low.
authorJerome Jutteau <jerome@jutteau.fr>
Sat, 5 Dec 2020 11:52:10 +0000 (12:52 +0100)
committerJerome Jutteau <jerome@jutteau.fr>
Sat, 5 Dec 2020 11:56:27 +0000 (12:56 +0100)
When post_max_size == upload_max_filesize, Jifeau sends too large request (files + headers) and serveur still returns 200.
Jirafeau does not see any files and return Error 23.
Javascript client now detect this error and retry with a lower file size to make room for headers.

closes #240

Signed-off-by: Jerome Jutteau <jerome@jutteau.fr>
lib/functions.js.php

index ebf8531ac414aeb26655f1ab68ed1efdab4d88ae..ced2fa7b5e6bdbd06bfad4c0046c71c92779fb53 100644 (file)
@@ -494,7 +494,16 @@ function async_upload_push (code)
             {
                 var res = req.responseText;
 
-                if (/^Error/.test(res))
+                // This error may be triggered when Jirafeau does not receive any file in POST.
+                // This may be due to bad php configuration where post_max_size is too low
+                // comparing to upload_max_filesize. Let's retry with lower file size.
+                if (res === "Error 23")
+                {
+                    async_global_max_size = Math.max(1, async_global_max_size - 500);
+                    async_upload_push (async_global_last_code);
+                    return;
+                }
+                else if (/^Error/.test(res))
                 {
                     pop_failure (res);
                     return;
@@ -504,15 +513,17 @@ function async_upload_push (code)
                 var code = res[0]
                 async_global_transfered = async_global_transfering;
                 async_upload_push (code);
+                return;
             }
             else
             {
                 if (req.status == 413) // Request Entity Too Large
                 {
                     // lower async_global_max_size and retry
-                    async_global_max_size = parseInt (async_global_max_size * 0.8);
+                    async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.8));
                 }
                 async_upload_push (async_global_last_code);
+                return;
             }
         }
     }

patrick-canterino.de