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

#javascript #ajax #xmlhttprequest

Вопрос:

Я использовал учебник, приведенный здесь, — Руководство по прогрессу загрузки файлов — для загрузки файлов и отслеживания хода загрузки, и это очень хорошее решение, которое прекрасно работает.

Тем не менее, я хочу иметь возможность обработать файл, как только он будет загружен на сервер, и, поскольку это большие файлы, мне нужно обновить пользователя, чтобы он знал, что что-то происходит, пока он ждет.

Я инициализирую использование XMLHttpRequest () let xhr = new XMLHttpRequest(); .

Затем я открываю соединение с помощью xhr.open("POST", "index.php"); .

Затем я определяю свою процедуру выполнения, используя xhr.upload.addEventListener("progress", ({loaded, total}) =>{} которую, содержит выходные данные для индикатора выполнения.

HTML — форма инкапсулируется let data = new FormData(form); и затем передается на сервер с помощью xhr.send(data); .

Все это определено в учебнике.

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

Я пытался

   xhr.onreadystatechange = function(){
    if(xhr.readyState == 4 amp;amp; xhr.status == 200){
      console.log(xhr.response);
    }
  }
 

Но это не дает никакого результата.

Может ли кто-нибудь предложить способ достижения этой цели?

php-код выглядит так:

 $index_number=0;
$output="";
if ($_FILES['file']['error'])){
  die('Cannot process file.');
}
$file_name =  $_FILES['file']['name'];
$file_dir = "files/".$_POST['dbname']."/";
$tmp_name = $_FILES['file']['tmp_name'];
$query="INSERT INTO drawings (name)VALUES('".$file_name."');";
$mysqli = new mysqli('localhost', 'dwgman', 'fM6#[psL!dwD8XV G1', $_POST['dbname']);
if ($result = $mysqli->query($query)) {
  $index_number=$mysqli->insert_id;
}
if(!file_exists($file_dir)){
  mkdir($file_dir,0744);
}
move_uploaded_file($tmp_name,$file_dir.$index_number.".sat");
$command="/var/www/html/dfile/stored "."/var/www/html/dfile/".$file_dir.$index_number.".sat ".$_POST['dbname']." ".$index_number;
passthru($command); 
 

Комментарии:

1. какой результат? без PHP-кода мы не можем сказать, какой результат вы ожидаете увидеть. xhr.response или xhr.responseText являются вероятными кандидатами на чтение ответа сервера

2. однако PHP в этом руководстве не отправляет никакого ответа

3. Я отредактировал сообщение, чтобы включить PHP, хотя я не уверен, что оно что-то добавляет. В принципе, у меня есть программа, которая анализирует файл и заполняет базу данных, сообщая о ходе выполнения: 10…20…30… и т. Д. Я хотел бы записать этот вывод, чтобы проинформировать пользователя.

4. где этот код, о котором вы говорите? Я не вижу ничего, что могло бы привести к прогрессу

5. Программа представляет собой скомпилированную программу на языке си, которую я написал и которая использует стороннюю библиотеку для анализа загруженного файла и хранения элементов в базе данных. Программа использует printf для печати чисел: на десятой части пути через файл программа напечатает «10», на полпути через файл программа напечатает «50» и так далее до 100 процентов. Мне нужно получить доступ к этим выводам, чтобы я мог показать пользователю ход выполнения.