Yapmaya çalıştığım şey, ajax kullanarak dosya/dosya bilgilerini upload.php
'a yükleyip, daha sonra aynı bilgileri tekrar bir uzak sunucuya remoteUpload.php
ile curl olarak yüklemektir. Son olarak, remoteUpload.php
dosyasında dosya/dosyaların gerçek yüklenmesini gerçekleştiriyorum.Curl yükleme ilerlemesi görüntülenecek ajax'e nasıl gönderilir
İlk adımı gerçekleştirirken -> dosya/dosya bilgilerini upload.php
'a yükledim ajax kullanarak bu adımın bir ilerleme çubuğunu görüntülüyorum.
Ancak, ikinci adımı ne zaman gerçekleştirirseniz ->remoteUpload.php
için curl kullanarak aynı bilgiyi tekrar tekrar karşıya yüklediyseniz, ilerleme çubuğu görüntülenmez ve bu benim sorunumdur.
nasıl ajax ikinci adım için ilerleme çubuğu görüntülemek için?
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";
'u kullanabilirsiniz Teşekkür ederim, ancak sözlerimi koduma nasıl ekleyebilirim? –
Tamam, mümkün olduğunca eşleştirmeyi denedim, temel örnekte açıkla, sonra kodu kontrol et ** AYRINTILI CEVAP ** – Armen
Ne yazık ki, ilerleme görünmez ama bitene kadar bekler ve sonra doğrudan% 100 basar. –