Javascript多次拖放文件-将新文件添加到以前的文件中,而不是替换
我有一个拖放框,在这里我可以显示图像预览(用于排序和旋转)并将它们上传到服务器上。如果我第一次删除一个或多个图像,一切都正常。但是,如果我在现有图片的基础上添加新图片(比如我添加了2个新图片,并且我已经从上一次添加中获得了3个),在预览中我确实会看到所有图片(总共5个),但是当我上传到服务器时,只有最后2个图片被实际上传 以下是我使用的部分Javascript代码:Javascript多次拖放文件-将新文件添加到以前的文件中,而不是替换,javascript,drag-and-drop,Javascript,Drag And Drop,我有一个拖放框,在这里我可以显示图像预览(用于排序和旋转)并将它们上传到服务器上。如果我第一次删除一个或多个图像,一切都正常。但是,如果我在现有图片的基础上添加新图片(比如我添加了2个新图片,并且我已经从上一次添加中获得了3个),在预览中我确实会看到所有图片(总共5个),但是当我上传到服务器时,只有最后2个图片被实际上传 以下是我使用的部分Javascript代码: form.addEventListener( 'drop', function( e ) { droppedFil
form.addEventListener( 'drop', function( e )
{
droppedFiles = e.dataTransfer.files; // the files that were dropped
showFiles( droppedFiles ); // the fx that shows the previews
});
.....
var ajaxData = new FormData( form );
if( droppedFiles ) {
Array.prototype.forEach.call( droppedFiles, function( file )
{
ajaxData.append( input.getAttribute( 'name' ), file );
});
}
您需要保留droppedFiles先前的值,请使用spread运算符:
droppedFiles = [... droppedFiles, e.dataTransfer.files]; // the files that were dropped
showFiles( droppedFiles ); // the fx that shows the previews
您可以在拖放时替换droppedFiles值。您应该将新文件连接到DorpedFiles数组,以跟踪每个文件,只是尝试了这样做,但没有成功。我做错了吗?droppedFiles=droppedFiles.concat(e.dataTransfer.files)非常好用,谢谢!但是,假设我已经通过jquerydraggable对第一批图像进行了排序,如果我使用您的方法,我基本上是在重新加载整个图像集,但是我丢失了之前所做的任何更改(更改图像顺序或旋转图像)。如何保存这些更改?非常感谢您能给予的任何帮助!您好,请改用push,例如dataTransfer.files.forEach(file=>droppedFiles.push(file))。谢谢,但不起作用。我相信“推送”只对数组有效,而我拥有的是对象。有处理对象的类似函数吗?@AndreaL,你是说droppedFiles是一个对象吗?它是如何构造的?从控制台日志中,如果我上传3个图像,就会得到一个对象:FileList{0:File,1:File,2:File,length:3}