@rimlin

Как узнать количество загруженных файлов?

Не могу разобраться, как узнать количество загруженных файлов на сервер через js.

В php разобрался - их количество записывается в файл, с каждым загруженным файлом число увеличивается на 1. Файлы загружаются через ифрейм, без перезагрузки страницы.

В js через setInterval делаю запрос к php файлу, который отдает информацию о содержимом файле, который содержит количество загруженных файлов. Но запрос происходит тогда, когда все файлы будут загружены. Даже если напрямую обращаться к файлу с количеством загруженных файлов, запрос будет после того, когда будут загружены файлы. Запросы делаю через $.get (jquery).

Если с помощью js это сделать нельзя, то нужно смотреть в сторону AS, верно? Там вроде все это проще можно проделать.

================
Что делается:

JS:

function check () {
        setInterval(function () {
            $.get('/check.php, function (res) {
                console.log('progress', res);
            });
        }, 1000);
}

function send () {
        var iframe = '<iframe name="tname" id="tname" style="display: none;"></iframe>';
        $('body').append(iframe);
        $('form').submit(); // у формы таргет на ифрейм
}

check();
send();


PHP:
Файл, куда загружаются файлы:
<?
        $finfo = 'files_amount.txt';
        $filesAmount = 0;
        foreach ($files as $file) { // $files - сериализованный массив $_FILES
            sleep(3); // для проверки
            $temp_path = '/temp/'.$file['name'];
            move_uploaded_file($file['tmp_name'], $temp_path);

            $filesAmount += 1;
            file_put_contents($finfo, $filesAmount);
        }
?>


Файл проверки (check.php):
<?
        $finfo = 'files_amount.txt';
        echo file_get_contents($finfo);
?>


===============

Попробовал обернуть send() в setTimeout, запросы на проверку отправлялись, но когда приходило время выполнить метод send() - запросы отправляться перестали.
  • Вопрос задан
  • 2738 просмотров
Пригласить эксперта
Ответы на вопрос 2
setInterval(function() {
      $("#id").load("check.php");
  }, 500);
так попробуйте
Ответ написан
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Никакой AS не нужен.
Файлы загружаются через ифрейм, без перезагрузки страницы.

Какой еще iframe? На аяксе все делать нужно.

У вас проблема в том, что вам нужно знать количество загруженных файлов не только с одной сессии одного пользователя, а знать сколько вообще льют все и это нужно чтобы все и видели во время закачки?

setInterval на аякс запрос вешайте и будет вам все параллельно не зависимо от каких то там закачек.
api.jquery.com/jquery.ajax

$.ajax({
url: "some.php",
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});

Если файлов не много, лучше не храните инфу в блокноте а читайте директорию сразу на количество файлов. На данном этапе вам будет проще за всем следить чем за каким то файлом, который может быть залочен в момент обращения какого либо скрипта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы