0

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

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 检查是否允许用户上传文件,如果没有,则返回 success=false 或其他任何内容。奇怪的是,进度条仍在进行中,就像服务器将上传它一样,当进度完成时我只收到错误消息。这真的很奇怪,我的期望是进度不会开始,或者应该在返回错误时取消。当然,我可以在开始发送之前检查用户,但是我做了第二次,在没有终点的 ajax 中输入了一个错误的 URL,它仍然显示进度直到结束,如果它是一个大文件需要一段时间有时会冻结浏览器。有没有办法在服务器错误的进程中更早地停止进程。在谷歌搜索几个小时后找到解决方案会很棒,但没有找到有同样问题的人问候 JP

4

1 回答 1

0

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

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

于 2014-06-13T13:34:45.350 回答