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; },
现在您将收到新的图像文件,您可以从服务器中删除它