Я использовал приведенный здесь учебник - Учебник по загрузке файлов - для загрузки файлов и отслеживания хода загрузки, и это очень хорошее решение, которое прекрасно работает.
Однако я хочу иметь возможность обрабатывать файл после его загрузки на сервер, и, поскольку это большие файлы, мне нужно обновить пользователя, чтобы он знал, что что-то происходит, пока он ждет.
Я инициализирую 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 && 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);
какой выход? без кода PHP мы не можем сказать, какой вывод вы ожидаете увидеть.
xhr.response
илиxhr.responseText
являются вероятными кандидатами на чтение ответа сервера.однако PHP в этом руководстве не отправляет никакого ответа
Я отредактировал пост, включив PHP, хотя я не уверен, что он что-то добавляет. По сути, у меня есть программа, которая анализирует файл и заполняет базу данных, сообщая о своем прогрессе по мере продвижения: 10...20...30... и т. д. Я хотел бы зафиксировать этот вывод, чтобы проинформировать пользователя.
где этот код, о котором вы говорите? Я не вижу ничего, что приводит к прогрессу
Программа представляет собой скомпилированную программу на языке C, которую я написал и которая использует стороннюю библиотеку для разбора загруженного файла и сохранения элементов в базе данных. Программа использует printf для печати чисел: на десятой части файла программа напечатает «10», на середине файла программа напечатает «50» и так далее до 100 процентов. Мне нужно получить доступ к этому выводу, чтобы я мог показать пользователю прогресс.
Спасибо всем, кто посмотрел это. Я чувствую себя полным идиотом. Код работает, но сообщения, которые я получал, выводились в stderr. Я мог видеть вывод, когда запускал программу из командной строки, но мои вызовы ajax генерировали ошибки, которые не отображались. Извинения.