文件上载进度不会因服务器错误而停止

时间:2014-06-13 11:31:30

标签: jquery file upload jqxhr

我目前正在开发一个需要上传文件输入的项目,我根据我在本网站上看到的一些例子实现了它,并且工作正常。

function send(file){
var fd = new FormData();

    fd.append(file.name, file);
    $.ajax({
        url: 'upload',
        type: 'POST',
        enctype: "multipart/form-data",
        xhr: function xhr() {
            myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) { 
                myXhr.upload.addEventListener('progress', function(evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        percentComplete = parseInt(percentComplete * 100, 10);

                        progress.setValue(percentComplete);

                    }
                }, false); 

            }
            return myXhr;
        },

        beforeSend: beforeSend,
        success: onComplete,
        error: onError,
        // Form data
        data: fd,
        //Options to tell jQuery not to process data or worry about content-type.
        cache: false,
        contentType: false,
        processData: false
    });
}

然而有一件事情并不顺利,我很想知道是否有人对此有一个很好的解释。在java服务器端,我的servlet检查是否允许用户上传文件,如果没有,则发回成功= false或者什么。奇怪的是,进度条仍在进行,就像服务器将上传它一样,我只得到进度完成时的错误。这真的很奇怪我的期望是进度不会开始,或者应该在返回错误时取消。当然,我可以在开始发送之前检查用户,但我做了一次在ajax中放置了一个错误的URL,没有终点,它仍然显示进展直到结束,如果它是一个大文件需要一段时间有时冻结浏览器。 有没有办法在服务器错误和服务器错误的进展中提前停止进展。 经过几个小时的谷歌搜索没有找到有同样问题的人后,找到解决方案会很棒 问候 JP

1 个答案:

答案 0 :(得分:0)

服务器收到请求后,文件已经上传,告诉用户无法上传,为时已晚。您可以先进行一次ajax调用,检查用户是否可以上传,然后上述调用,如果他们有权限则上传文件。

有一个问题要问自己,如果用户没有上传权限,为什么要显示上传表单?