我想应用ajax上传图片并为其命名:
上传图片功能的js部分是:
function sendFile(file) {
$.ajax({
type: 'post',
url: '@routes.CommonController.uploadhandler("")' + file.name,
data: file,
success: function () {
return true;
},
error: function(){
return false;
},
xhr: function(){
// get the native XmlHttpRequest object
var xhr = $.ajaxSettings.xhr() ;
// set the onprogress event handler
xhr.upload.onprogress = function(evt){ console.log('progress', evt.loaded/evt.total*100) } ;
// set the onload event handler
xhr.upload.onload = function(){ console.log('DONE!') } ;
// return the customized object
return xhr ;
},
processData: false,
contentType: file.type
});
}
文件列表是FileList Object。它应该是:FileList {0:File,1:File,length:2,item:function}
上传每个图片功能的管理是:
$("#px-submit").click(function(event){
var arrayfiles=[];
var filelist=$("#filename").prop("files");
for (var i = 0; i < filelist.length; i++) {
arrayfiles[i] = filelist[i];
}
console.log("arrayfiles:", arrayfiles);
var allsuccess=arrayfiles.every(function(element, index, array) {
console.log("sending:", element.name);
var r=sendFile(element);
return r;
});
if(allsuccess){
$("form" ).reset;
alert("All your pictures are already uploaded!");
}else{
$("form" ).reset;
alert("Some error during uploading pictures, you should upload the picture again");
}
我将fileList更改为Array,然后使用Array.every尝试确认每个文件已经上传。但它总是在文件上传时停止。为什么会这样?以及如何更改它以确认已上传的2个或更多文件?
答案 0 :(得分:0)
要考虑的一些事情:
var filelist=$("#filename").prop("files");
filelist
变量应该表示什么,$("#filename").prop("files")
返回什么?我会假设它返回一个字符串,在这种情况下你会重复一个字符串。
你的for循环看起来有点奇怪,它没有终止条件:
for (var i = 0; f = filelist[i]; i++) {
arrayfiles[i]=f;
}
我可能会考虑将for循环重写为以下内容(假设filelist
是一个数组):
for (var i = 0; i < filelist.length; i++) {
arrayfiles[i] = filelist[i];
}