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

Gri*_*ish 9 javascript jquery dropzone.js

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

任何帮助将非常感激..

Har*_*ria 19

其他方式,

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

dropzone.on("success", function(file, response) {
  $(file.previewTemplate).append('<span class="server_file">'+response.path+'</span>');
});
Run Code Online (Sandbox Code Playgroud)

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

{
    status: 200,
    path: "/home/user/anything.txt"
}
Run Code Online (Sandbox Code Playgroud)

所以我们将它存储pathspan我们要删除它时可以访问的内容中.

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 } );
});
Run Code Online (Sandbox Code Playgroud)

在此过程之后,预览模板将Dropzone与存储在a中的文件路径一起删除span.


Fun*_*ope 15

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

PHP:

move_uploaded_file($_FILES['file']['tmp_name'], $newFileName);
echo $newFileName;
Run Code Online (Sandbox Code Playgroud)

JS:

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

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

JS:

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

PHP:

$fileList = json_decode($_POST['fileList']);

for($i = 0; $i < sizeof($fileList); $i++)
{
    unlink(basename($fileList[$i]));
}
Run Code Online (Sandbox Code Playgroud)

  • 在PHP方面,我使用uniqid()为文件名前缀一个随机字符串,所以即使用户上传相同的文件50次,我也会将50个不同的文件和文件名报告给JS.如果你想要更高级,你可以做一些MD5或哈希检查,但这对大多数情况应该没问题. (3认同)
  • 微小的问题.如果用户提交两个具有相同名称的文件,该怎么办?不是这个......或者甚至是最糟糕的......如果他把同一个文件两次丢弃到掉落区......那是不寻常的,但可能会发生...... (2认同)

小智 6

最简单的方法

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

this.on("removedfile", function(file) {
alert(file.name);

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


});
Run Code Online (Sandbox Code Playgroud)

php文件"delete.php"

<?php
$t= $_POST['name'];
echo $t;
unlink($t); 
?>
Run Code Online (Sandbox Code Playgroud)


Ray*_*ond 5

当您单击“删除”按钮时,该文件将被删除:

将其放在您的 JS 文件或 HTML 文件(或 PHP 视图/操作文件)中:

<script type="text/javascript">
Dropzone.options.myAwesomeDropzone = { 
// Change following configuration below as you need there bro
autoProcessQueue: true,
uploadMultiple: true,
parallelUploads: 2,
maxFiles: 10,
maxFilesize: 5,
addRemoveLinks: true,
dictRemoveFile: "Remove",
dictDefaultMessage: "<h3 class='sbold'>Drop files here or click to upload document(s)<h3>",
acceptedFiles: ".xls,.xlsx,.doc,.docx",
//another of your configurations..and so on...and so on...
init: function() {
     this.on("removedfile", function(file) {
          alert("Delete this file?");
          $.ajax({
               url: '/delete.php?filetodelete='+file.name,
               type: "POST",
               data: { 'filetodelete': file.name}
          });
     });
}}
</script>
Run Code Online (Sandbox Code Playgroud)

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

<?php
     $toDelete= $_POST['filetodelete'];
     unlink("{$_SERVER['DOCUMENT_ROOT']}/*this-is-the-folder-which-you-put-the-file-uploaded*/{$toDelete}");
     die;
?>
Run Code Online (Sandbox Code Playgroud)

希望这对你有帮助,兄弟:)