Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.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
Jquery 使用dropzone.js上载具有相同file.name的多个文件_Jquery_Html_Dropzone.js - Fatal编程技术网

Jquery 使用dropzone.js上载具有相同file.name的多个文件

Jquery 使用dropzone.js上载具有相同file.name的多个文件,jquery,html,dropzone.js,Jquery,Html,Dropzone.js,我正在实现dropzone.js,在我尝试上载多个同名文件之前,一切都很完美,比如说从一个iOS设备上载照片,其中所有文件都有相同的名称:image.jpg,我可以在php代码中更改文件名,但问题是dropzone中不再可以访问,例如,删除上载的照片,因为我将以两个不同的名称结束,一个在用我的php重命名的文件中,另一个在dropzone中 有人能帮我吗?在用js上传之前,有没有办法重命名文件 谢谢,您是否正确设置了paramName?您需要记住,如果uploadMultiple为true,Dr

我正在实现dropzone.js,在我尝试上载多个同名文件之前,一切都很完美,比如说从一个iOS设备上载照片,其中所有文件都有相同的名称:image.jpg,我可以在php代码中更改文件名,但问题是dropzone中不再可以访问,例如,删除上载的照片,因为我将以两个不同的名称结束,一个在用我的php重命名的文件中,另一个在dropzone中

有人能帮我吗?在用js上传之前,有没有办法重命名文件


谢谢,

您是否正确设置了paramName?您需要记住,如果uploadMultiple为true,Dropzone将向该字段添加[],因此您可以通过使用paramName命名的数组获取值

但如果您仍要重命名,可以尝试以下方法:

Dropzone.options.myAwesomeForm = {
  paramName: "file",
  uploadMultiple: true,
  parallelUploads: 1,
  //[more configuration]

  init: function() {
    var myDropzone = this;

    //[some code]

    this.on("sending", function(file, xhr, formData) {
      var name = "name-you-want-and-should-be-unique";
      formData.append(name, file);
    });

    //[some more code]
  }
}
请注意,我将parallelUploads设置为1,这样您想要的名称就不会被替换。但是,如果您确实想要更多,则应该在通过侦听event addedfile添加的每个文件中添加一个数据id,然后在通过sending发送文件时使用它


我希望您觉得它有用:

我在项目中使用的是jQuery版本。我希望你不介意,也许这会对你有所帮助

var dropbox = $(form);
var dropzone_files = [];


dropbox.dropzone({
url: '/etc/',
init: function() {
var Dropzone = this;
// remove function
this.on('removedfile', function(file) {
for(var i=0; i< dropzone_files.length; i++) {
    if (file.name == dropzone_files[i]['old_name']) {
    var file_name = dropzone_files[i]['new_name'];
    var data = { 'file_name' : dropzone_files[i]['new_name'] };
    break;
    }
}
console.log(data);
var removeData = form.serialize() + '&' + $.param(data);
//console.log(removeData);
$.ajax({
        type: 'POST',
        url: 'your-dropzone-remove-file.php',
        data: removeData,
        success: function(report) {
            dropzone_files.splice(i,1);
            console.log(dropzone_files);
            //do more things here
        });
 // end init
 },
 //upload function
 success: function(file, Response) {
         //console.log(Response); is your response from php file of whatever rename.
         // pair up old-filename with new file name.
         dropzone_files.push({'new_name': Response, 'old_name': file.name});
         //console.log(dropzone_files);
         // do whatever
        }
});
然后,在删除时,由于文件仍然是原始文件名,但这次,我们可以与arrayobject进行比较以获得新的文件名,并通过另一个ajax帖子从每次单击时的数组中删除该对象,但这次,使用新的文件名

这也是:


问候。

根据hien的回答,这是一个非常简单的方法。此示例还使用jQuery插件。添加文件时,让服务器回显服务器上文件的名称。使用dropzone成功事件捕获此事件,并将服务器文件名作为新属性附加到文件对象上。然后,您可以访问dropzone removedfile事件的属性,并将其作为要删除的文件的名称发送回服务器


@Hien的解决方案是可行的,但问题是当您上载两个或多个具有相同原始名称的文件时,因为for循环将始终匹配数组上的第一个图像,并将删除此元素。但是,此元素不一定是要删除的图像

我已将file.lastModified属性添加到您的dropzone_文件[],因为它似乎是唯一的。这对我很有用:

dropzone_files.push({'new_name': response, 'old_name': file.name, 'lastModified':file.lastModified});
然后,在您的if条件下:

if (file.name == dropzone_files[i]['old_name'] && file.lastModified==dropzone_files[i]['lastModified']) {/**/}
注: 我认为lastmodify是唯一的,所以,也许另一个解决方案是:将lastmodify值与img一起存储在数据库中。然后,您可以将此唯一值存储在removeData中。然后,在php中调用查询 从lastmodify=removeData的图像中删除

例如

希望这有帮助

dropzone_files.push({'new_name': response, 'old_name': file.name, 'lastModified':file.lastModified});
if (file.name == dropzone_files[i]['old_name'] && file.lastModified==dropzone_files[i]['lastModified']) {/**/}