Dropzone.js-如何从服务器删除文件?

我正在使用dropzone.js。 当我尝试删除文件时,只会删除缩略图,但不会删除服务器中的文件。 我尝试了一些方法,但它只是给了我客户端的图像名称,而不是服务器端的名称(两个名称都不同,以加密forms存储名称)。

任何帮助将非常感激..

我处理这个的方式是,在每个文件上传并存储在服务器上之后,我回显我在服务器上提供文件的名称,并将其存储在JS对象中,如下所示:

PHP:

move_uploaded_file($_FILES['file']['tmp_name'], $newFileName); echo $newFileName; 

JS:

 dropZone.on("success", function(file, serverFileName) { fileList[serverFileName] = {"serverFileName" : serverFileName, "fileName" : file.name }; }); 

有了这个,你可以在PHP中编写一个删除脚本,它接受“serverFileName”并进行实际的删除,例如:

JS:

 $.ajax({ url: "upload/delete_temp_files.php", type: "POST", data: { "fileList" : JSON.stringify(fileList) } }); 

PHP:

 $fileList = json_decode($_POST['fileList']); for($i = 0; $i < sizeof($fileList); $i++) { unlink(basename($fileList[$i])); } 

其他方式,

JSON格式或普通字符串从服务器获取response (然后仅使用response而不是response.path ),

 dropzone.on("success", function(file, response) { $(file.previewTemplate).append(''+response.path+''); }); 

这里,服务器可以像这样返回一个json,

 { status: 200, path: "/home/user/anything.txt" } 

因此,我们将此path存储到我们要删除它时可以访问的span中。

 dropzone.on("removedfile", function(file) { var server_file = $(file.previewTemplate).children('.server_file').text(); alert(server_file); // Do a post request and pass this path and use server-side language to delete the file $.post("delete.php", { file_to_be_deleted: server_file } ); }); 

在此过程之后, Dropzone将删除预览模板以及存储在span文件路径。

最简单的方法

JS文件,当您单击删除按钮时将运行此脚本

 this.on("removedfile", function(file) { alert(file.name); $.ajax({ url: "uploads/delete.php", type: "POST", data: { 'name': file.name} }); }); 

php文件“delete.php”

  
 success: function(file, serverFileName) { fileList['serverFileName'] = {"serverFileName" : serverFileName, "fileName" : file.name }; alert(file.name); alert(serverFileName); }, removedfile: function(file, serverFileName) { fileList['serverFileName'] = {"serverFileName" : serverFileName, "fileName" : file.name }; alert(file.name); alert(serverFileName); } 

单击“删除”按钮时将删除该文件:

把它放在你的JS文件或HTML文件(或你的PHP视图/动作文件)上:

  

..并将此代码放在您的PHP文件中:

  

希望这有助于你兄弟:)

我已经使它变得更容易,只需将新属性serverFileName添加到文件对象:

  success: function(file, response) { file.serverFileName = response.file_name; }, removedfile: function (file, data) { $.ajax({ type:'POST', url:'/deleteFile', data : {"file_name" : file.serverFileName}, success : function (data) { } }); } 

在我的情况下,服务器为每个特定图像发送一些带有deleteUrl的ajax响应。 我只是将此url插入’data-dz-remove’属性,已在previewTemplate中设置。

因为我使用jquery看起来如此:

 this.on("success", function (file, response) { $(file.previewTemplate).find('a.dz-remove').attr('data-dz-remove', response.deleteUrl); }); 

稍后这个attr用于发送带有此url的ajaxpost,以通过removefile事件删除服务器上的文件,如上所述。

这个简单的解决方案适用于单个文件上传,无需DOM操作。

PHP上传脚本

  [...] echo $filepath; // ie: 'medias/articles/m/y/a/my_article/my-image.png' 

JS Dropzones

  this.on("success", function(file, response) { file.path = response; // We create a new 'path' index }); this.on("removedfile", function(file) { removeFile(file.path) }); 

Dropzone之外的JS

 var removeFile = function(path){ //SEND PATH IN AJAX TO PHP DELETE SCRIPT $.ajax({ url: "uploads/delete.php", type: "POST", data: { 'path': path} }); } 

当您从那里保存图像时,您必须返回新的文件名:

echo json_encode(array(“Filename”=>“New File Name”));

在dropzone.js文件中:

成功:函数(文件,响应){

  obj = JSON.parse(response); file.previewElement.id = obj.Filename; if (file.previewElement) { return file.previewElement.classList.add("dz-success"); } }, 

当dropzone初始化时..

init:function(){

  this.on("removedfile", function(file) { var name = file.previewElement.id; $.ajax({ url: "post URL", type: "POST", data: { 'name': name} }); }); return noop; }, 

现在您将收到新的图像文件,您可以从服务器中删除它