Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript多次拖放文件-将新文件添加到以前的文件中,而不是替换_Javascript_Drag And Drop - Fatal编程技术网

Javascript多次拖放文件-将新文件添加到以前的文件中,而不是替换

Javascript多次拖放文件-将新文件添加到以前的文件中,而不是替换,javascript,drag-and-drop,Javascript,Drag And Drop,我有一个拖放框,在这里我可以显示图像预览(用于排序和旋转)并将它们上传到服务器上。如果我第一次删除一个或多个图像,一切都正常。但是,如果我在现有图片的基础上添加新图片(比如我添加了2个新图片,并且我已经从上一次添加中获得了3个),在预览中我确实会看到所有图片(总共5个),但是当我上传到服务器时,只有最后2个图片被实际上传 以下是我使用的部分Javascript代码: form.addEventListener( 'drop', function( e ) { droppedFil

我有一个拖放框,在这里我可以显示图像预览(用于排序和旋转)并将它们上传到服务器上。如果我第一次删除一个或多个图像,一切都正常。但是,如果我在现有图片的基础上添加新图片(比如我添加了2个新图片,并且我已经从上一次添加中获得了3个),在预览中我确实会看到所有图片(总共5个),但是当我上传到服务器时,只有最后2个图片被实际上传

以下是我使用的部分Javascript代码:

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}