在 JavaScript 中按名称拖放排序文件
Drag & Drop sort files by their name in JavaScript
我想按名称对文件进行排序,然后处理下一个代码。
以下是我上传的文件名:DSC08703-3.jpg、DSC08701-2.jpg、DSC08704-4.jpg
我在下面也提到了一个技巧。
$('#file').change(function () {
var pic1="";
var count=1;
var Allowedimages=0;
var uploadedcount=0;
filesup = event.target.files;
if (this.files.length > 0) {
haveToUpload=this.files.length;
$.each(filenames, function (i, v) {
var reader = new FileReader();
remainToUpload = parseInt(haveToUpload)-parseInt(i);
var proceedImg = remainToUpload;
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
img.onload = function () {
var canvas = document.createElement("canvas");
var value = 100;
var newsize=0;
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0, img.width, img.height);
var pic1=canvas.toDataURL("image/jpeg",0.80);
var x=1;
while (x <= 60) {
var filebd=$('#fileBD'+x).val();
if(filebd==NoImageSrc) {
break;
}
x++;
}
$('#ima'+x).attr('src', BASEURL+'/images/bx_loader.gif');
$('#fileBD'+(x)).val(pic1);
var imagesize=$('#oldimagesvalue').val();
$('#oldimagesvalue').val(parseInt(imagesize)+1);
}
};
reader.readAsDataURL(this);
});
}
});
我尝试了以下解决方案但没有用。
var filenames = [];
filenames.push(this.files);
filenames.sort();
for(var i=0; i<filenames.length; i++){
for(var j=0; j<filenames[i].length; j++){
//REST CODE HERE
}
}
首先,仔细检查 this.files
不是 File 接口数组
(https://developer.mozilla.org/en-US/docs/Web/API/File)
如果是这种情况,您必须像这样映射文件名:
var filenames = this.files.map(x => x.name);
至于对字符串数组进行排序:
var ascending = (a, b) => a > b ? 1 : -1;
filenames.sort(ascending);
// console.log(filenames);
从图像名称中获取数字并将该数字用作框值。
$.each(this.files, function (i, v) {
var tno = 0;
var parts = v.name.split("-");
var result = parts[parts.length - 1];
var tno = result.toString().split(".")[0];
var x=1;//parseInt(count)+parseInt(i)+parseInt(1);
var xx = 1;
if(tno>0) x = tno;
else x = xx;
x++;
xx++;
]);
我想按名称对文件进行排序,然后处理下一个代码。 以下是我上传的文件名:DSC08703-3.jpg、DSC08701-2.jpg、DSC08704-4.jpg
我在下面也提到了一个技巧。
$('#file').change(function () {
var pic1="";
var count=1;
var Allowedimages=0;
var uploadedcount=0;
filesup = event.target.files;
if (this.files.length > 0) {
haveToUpload=this.files.length;
$.each(filenames, function (i, v) {
var reader = new FileReader();
remainToUpload = parseInt(haveToUpload)-parseInt(i);
var proceedImg = remainToUpload;
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
img.onload = function () {
var canvas = document.createElement("canvas");
var value = 100;
var newsize=0;
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0, img.width, img.height);
var pic1=canvas.toDataURL("image/jpeg",0.80);
var x=1;
while (x <= 60) {
var filebd=$('#fileBD'+x).val();
if(filebd==NoImageSrc) {
break;
}
x++;
}
$('#ima'+x).attr('src', BASEURL+'/images/bx_loader.gif');
$('#fileBD'+(x)).val(pic1);
var imagesize=$('#oldimagesvalue').val();
$('#oldimagesvalue').val(parseInt(imagesize)+1);
}
};
reader.readAsDataURL(this);
});
}
});
我尝试了以下解决方案但没有用。
var filenames = [];
filenames.push(this.files);
filenames.sort();
for(var i=0; i<filenames.length; i++){
for(var j=0; j<filenames[i].length; j++){
//REST CODE HERE
}
}
首先,仔细检查 this.files
不是 File 接口数组
(https://developer.mozilla.org/en-US/docs/Web/API/File)
如果是这种情况,您必须像这样映射文件名:
var filenames = this.files.map(x => x.name);
至于对字符串数组进行排序:
var ascending = (a, b) => a > b ? 1 : -1;
filenames.sort(ascending);
// console.log(filenames);
从图像名称中获取数字并将该数字用作框值。
$.each(this.files, function (i, v) {
var tno = 0;
var parts = v.name.split("-");
var result = parts[parts.length - 1];
var tno = result.toString().split(".")[0];
var x=1;//parseInt(count)+parseInt(i)+parseInt(1);
var xx = 1;
if(tno>0) x = tno;
else x = xx;
x++;
xx++;
]);