Was ich versuche, ist die Datei/Dateien Informationen zu upload.php
mit Ajax hochladen, dann die gleichen Informationen erneut auf einen Remote-Server durch curl auf remoteUpload.php
hochladen. Schließlich in remoteUpload.php
Datei Ich führe den tatsächlichen Upload der Datei/Dateien.Wie locken Upload Fortschritt an Ajax zur Anzeige gesendet werden
Wenn Sie den ersten Schritt -> Upload der Datei/Dateien Informationen zu upload.php
Ich zeige eine Fortschrittsanzeige dieses Schrittes mit Ajax.
Aber wenn im zweiten Schritt -> die gleichen Informationen erneut auf den Remote-Server mit Curl zu remoteUpload.php
hochladen wird der Fortschrittsbalken nicht angezeigt, und das ist mein Problem.
Wie die Fortschrittsbalken von Ajax für die zweite Stufe angezeigt werden?
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";
Vielen Dank, aber wie Sie Ihre Wörter auf meinen Code anwenden? –
ok ich habe versucht so gut wie möglich zu erklären, es auf basic Beispiel, Code überprüfen nach ** DETAILLIERTE ANTWORT ** – Armen
Leider erscheint der Fortschritt nicht aber es wartet bis es fertig ist und druckt dann direkt 100%. –