X-Git-Url: https://git.p6c8.net/jirafeau_project.git/blobdiff_plain/0f7bae25565ac06eeb7fab1738c4a2859d017894..6e621f8bd49e3700163741f875aeebd7a361b957:/lib/functions.js.php?ds=inline diff --git a/lib/functions.js.php b/lib/functions.js.php index 1f83ae7..ced2fa7 100644 --- a/lib/functions.js.php +++ b/lib/functions.js.php @@ -1,7 +1,7 @@ + * Copyright (C) 2015 Jerome Jutteau * Copyright (C) 2015 Nicola Spanti (RyDroid) * * This program is free software: you can redistribute it and/or modify @@ -370,6 +370,10 @@ function classic_upload (file, time, password, one_time, upload_password) show_link (res[0], res[1], res[2], expiryDate); } + else + { + pop_failure (""); + } } req.open ("POST", 'script.php' , true); @@ -398,6 +402,7 @@ var async_global_ref = ''; var async_global_max_size = 0; var async_global_time; var async_global_transfering = 0; +var async_global_last_code; function async_upload_start (max_size, file, time, password, one_time, upload_password) { @@ -470,6 +475,7 @@ function async_upload_progress (e) function async_upload_push (code) { + async_global_last_code = code; if (async_global_transfered == async_global_file.size) { hide_upload_progression (); @@ -482,27 +488,49 @@ function async_upload_push (code) req.addEventListener ("abort", pop_failure, false); req.onreadystatechange = function () { - if (req.readyState == 4 && req.status == 200) + if (req.readyState == 4) { - var res = req.responseText; + if (req.status == 200) + { + 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; + } + + res = res.split ("\n"); + var code = res[0] + async_global_transfered = async_global_transfering; + async_upload_push (code); + return; + } + else { - pop_failure (res); + if (req.status == 413) // Request Entity Too Large + { + // lower async_global_max_size and retry + async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.8)); + } + async_upload_push (async_global_last_code); return; } - - res = res.split ("\n"); - var code = res[0] - async_global_transfered = async_global_transfering; - async_upload_push (code); } } req.open ("POST", 'script.php?push_async' , true); - var chunk_size = parseInt (async_global_max_size * 0.50); var start = async_global_transfered; - var end = start + chunk_size; + var end = start + async_global_max_size; if (end >= async_global_file.size) end = async_global_file.size; var blob = async_global_file.slice (start, end); @@ -558,15 +586,16 @@ function async_upload_end (code) function upload (max_size) { - if (check_html5_file_api () - && document.getElementById('file_select').files[0].size >= max_size) + var one_time_checkbox = document.getElementById('one_time_download'); + var one_time = one_time_checkbox !== null ? one_time_checkbox.checked : false; + if (check_html5_file_api ()) { async_upload_start ( max_size, document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, - document.getElementById('one_time_download').checked, + one_time, document.getElementById('upload_password').value ); } @@ -576,7 +605,7 @@ function upload (max_size) document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, - document.getElementById('one_time_download').checked, + one_time, document.getElementById('upload_password').value ); } @@ -621,17 +650,17 @@ function upload_time_estimation_speed_string() if (s <= 1000) { res = s.toString(); - scale = "Bit/s"; + scale = "B/s"; } else if (s < 1000000) { res = Math.floor(s/100) / 10; - scale = "KBit/s"; + scale = "KB/s"; } else { res = Math.floor(s/100000) / 10; - scale = "Mbit/s"; + scale = "MB/s"; } if (res == 0) return '';