我目前正在开发一个需要上传文件输入的项目,我根据我在本网站上看到的一些例子实现了它,并且工作正常。
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
答案 0 :(得分:0)
服务器收到请求后,文件已经上传,告诉用户无法上传,为时已晚。您可以先进行一次ajax调用,检查用户是否可以上传,然后上述调用,如果他们有权限则上传文件。
有一个问题要问自己,如果用户没有上传权限,为什么要显示上传表单?