仅在使用ajax上载文件时显示进度条

时间:2018-01-06 09:54:26

标签: javascript ajax file-upload progress-bar jquery-file-upload

我的问题是,进度条始终可见。我想只看到它,当上传正在进行或完成时。

如果你想看到将文件上传到服务器的php文件,请发表评论。

上传工作正常,问题只出在进度条上。

我的HTML格式:

    <form method="post" id="form" enctype="multipart/form-data" action="files/import_vevo_xls.php">
              <table class="form">
                <tr>    
                    <td>
                        <input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/>
                    </td>
                    <td>
                        <div id="fileName"></div>
                        <div id="fileSize"></div>
                        <div id="fileType"></div>
                    </td>
                </tr>
              </table>
              <table class="form">
                <tr>
                  <td class="last_td_no_border">
                    <button class="btn saveButton" name="submitButton" type="button" onclick="uploadFile()" id="importButton">Vevők importálása</button>
                  </td>
<div id="progress" style="display: block;width: 200px;padding: 1px 5px;margin: 1px 0;border: 1px inset #446;border-radius: 4px;">
<div id="progressNumber" style="height:5px;background: lime;"></div>
<div id="progressValue" style="text-align: center;"></div>

</div>
                </tr>
              </table>
            </form> 

和javascript代码:

var mbMaxFilesize = 5242880; // 5 MB

function fileSelected() {
    /* A fajl kiválasztása után, megnézzük a nevét, kiszámítjuk a méretét és kiírjuk a típusát */
    var file = document.getElementById('fileToUpload').files[0];
    if (file) {
        var fileSize = 0;
        if (file.size > 1024 * 1024)
            fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
        else
            fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';

        document.getElementById('fileName').innerHTML = 'Név: ' + file.name;
        document.getElementById('fileSize').innerHTML = 'Méret: ' + fileSize;
        document.getElementById('fileType').innerHTML = 'Típus: ' + file.type;
    }
    /* Megvizsgáljuk, hogy nem haladja-e meg a limitünket, az aktuálisan kiválasztott fájl mérete */
    if (file.size > mbMaxFilesize) {
        alert("A fájl mérete maximum 5 MB lehet.");
        xhr.addEventListener("abort", uploadCanceled, false);
        return false;
    }
}

function uploadFile() {
    /* Maga az XMLHttpRequest indítása. A fajl kivalasztasa esetén itt indítjuk meg a küldést, illetve az eventeket/figyelésüket
    majd meghívjuk az upload.php szerver oldali fájlunkat */
    var fd = new FormData();
    fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener("progress", uploadProgress, false);
    xhr.addEventListener("load", uploadComplete, false);
    xhr.addEventListener("error", uploadFailed, false);
    xhr.addEventListener("abort", uploadCanceled, false);
    xhr.open("POST", "files/import_vevo_xls.php");
    xhr.send(fd);
}

function uploadProgress(evt) {
    if (evt.lengthComputable) {
        var percentComplete = Math.round(evt.loaded * 100 / evt.total);
        document.getElementById('progressNumber').style.width = percentComplete + '%'; /*grafikus kijelzésnek*/
        document.getElementById('progressValue').innerHTML = percentComplete.toString() + '%'; /*érték kijelzésének*/
    } 
    else 
    {
        document.getElementById('progressNumber').innerHTML = 'nem kiszámithato.';
    }
}
function uploadComplete(evt) {
    document.getElementById('progressNumber').style.width = 100 + '%'; /*grafikus kijelzésnek*/
    document.getElementById('progressValue').innerHTML = '100' + '%'; /*érték kijelzésének*/
    alert(evt.target.responseText);

}
function uploadFailed(evt) {
    alert("Hiba, a feltöltés sikertelen.");
}
function uploadCanceled(evt) {
    alert("A feltöltést a böngészö megszakitotta.");
}

1 个答案:

答案 0 :(得分:1)

为了在上传期间或完成时可以看到进度条,需要进行三项更改:

使用div更改id="progress"

<!--This makes the progressbar initially invisible.-->
<div id="progress" style="visibility:hidden;...>

在函数uploadProgress中添加以下行:

<!--This makes progressbar visible during upload.-->
document.getElementById('progress').style.visibility = 'visible';

添加此拖曳功能fileSelected

<!--This hides progressbar if user selects another file.-->
document.getElementById('progress').style.visibility = 'hidden';