Jquery 使用dropzone.js上载具有相同file.name的多个文件
我正在实现dropzone.js,在我尝试上载多个同名文件之前,一切都很完美,比如说从一个iOS设备上载照片,其中所有文件都有相同的名称:image.jpg,我可以在php代码中更改文件名,但问题是dropzone中不再可以访问,例如,删除上载的照片,因为我将以两个不同的名称结束,一个在用我的php重命名的文件中,另一个在dropzone中 有人能帮我吗?在用js上传之前,有没有办法重命名文件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
谢谢,您是否正确设置了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']) {/**/}