Quello che sto cercando di fare è caricare le informazioni del file/file di upload.php
con Ajax, poi caricare le stesse informazioni di nuovo a un server remoto per curl per remoteUpload.php
. Infine nel file remoteUpload.php
eseguo l'effettivo caricamento del file/dei file.Come inviare ricciolo avanzamento del caricamento di ajax per essere visualizzata
Quando si esegue il primo passaggio -> caricare le informazioni file/file su upload.php
Visualizzo una barra di avanzamento di questo passaggio utilizzando ajax.
Ma quando si esegue il secondo passaggio -> caricare nuovamente le stesse informazioni sul server remoto utilizzando il ricciolo su remoteUpload.php
, la barra di avanzamento non viene visualizzata e questo è il mio problema.
Come visualizzare la barra di avanzamento per il secondo passo da ajax?
Javascript:
var upload_btn = document.getElementById('upload_file');
var result = document.getElementById('result');
upload_btn.onclick = function() {
var uploadInput = document.getElementsByName('file[]')[0];
if (uploadInput.files.length > 0) {
console.clear();
var ajax = new XMLHttpRequest();
var inputFileData = formData(uploadInput);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 && ajax.status == 200) {
var json = JSON.parse(ajax.responseText);
result.innerHTML = json.text;
}
};
ajax.upload.addEventListener('progress', function (e) {
result.innerHTML = Math.round(e.loaded/e.total * 100) + "%";
});
ajax.open("post", "upload.php");
ajax.send(inputFileData);
}
};
function formData(inputFileObj) {
var formData = new FormData;
var inputFile = inputFileObj.files;
if (inputFile.length > 0) {
for (i = 0; i < inputFile.length; i++) {
formData.append(inputFileObj.name, inputFile[i]);
}
}
return formData;
}
PHP: (upload.php)
function progressCallback($dltotal, $dlnow, $ultotal, $ulnow) {
static $last;
$progress = @round($ulnow/$ultotal * 100);
if($last < $progress) echo json_encode(array('text' => $progress));
flush();
$last = $progress;
}
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post' && !empty($_FILES)) {
foreach ($_FILES['file']['tmp_name'] as $index => $tmpFileName) {
if ($_FILES['file']['error'][$index] > 0) {
$text = "A file did not uploaded correctly.";
return false;
}
$ch = curl_init("http://serverfiles/remoteUpload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@' . $tmpFileName));
$text = curl_exec($ch);
}
}
echo json_encode(array('text' => $text));
exit;
PHP: (remoteUpload.php)
if (move_uploaded_file($_FILES['fileupload']['tmp_name'], "files/" . $_FILES['fileupload']['name']))
echo "The file has been uploaded.";
else
echo "error";
Grazie, ma come applicare le parole sul mio codice? –
ok ho provato la corrispondenza possibile spiegarlo nell'esempio di base, controllare il codice dopo ** RISPOSTA DETTAGLIATA ** – Armen
Sfortunatamente, il progresso non appare ma attende fino alla fine e quindi stampa direttamente al 100%. –