如何从拖放区上传和删除文件.js

2022-08-30 10:12:22

我已经使用了下面的代码,图像已被删除,但缩略图仍然显示。

 Dropzone.options.myDropzone = {
  init: function() {
    this.on("success", function(file, response) {
      file.serverId = response; 

    });
    this.on("removedfile", function(file) {
      if (!file.serverId) { return; }
      $.post("delete-file.php?id=" + file.serverId); 
    });
  }

答案 1

要删除缩略图,您必须启用addRemoveLinks:true,并在dropzonejs中使用“removefile”选项

removefile:每当从列表中删除文件时调用。您可以收听此内容,并根据需要从服务器中删除该文件。

addRemoveLinks: true,
removedfile: function(file) {
    var _ref;
    return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
  }

我还为删除脚本添加了一个ajax调用,它看起来像这样:

addRemoveLinks: true,
removedfile: function(file) {
    var name = file.name;        
    $.ajax({
        type: 'POST',
        url: 'delete.php',
        data: "id="+name,
        dataType: 'html'
    });
var _ref;
return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;        
              }

它对我有用,所以我希望它有帮助。


答案 2

除了上面最好的答案 - 要删除空格并用破折号替换并转换为小写,请在dropzone中应用此js.js文件:

name = name.replace(/\s+/g, '-').toLowerCase(); 

到文件名处理 - 我编辑了文件和上面的ajax调用。这样,客户端处理文件命名,并自动将其发送到PHP /服务器端,因此您不必在那里重做它,并且它非常安全。dropzone.js

在某些情况下,js根据函数/命名而变化:

放置区.js - 第 293 行(大约):

node = _ref[_i];
node.textContent = this._renameFilename(file.name.replace(/\s+/g, '-').toLowerCase());

下降区.js - 第 746 行(大约):

Dropzone.prototype._renameFilename = function(name) {
  if (typeof this.options.renameFilename !== "function") {
    return name.replace(/\s+/g, '-').toLowerCase();
  }
  return this.options.renameFilename(name.replace(/\s+/g, '-').toLowerCase());
};

我将整个部分移到了顶部,如下所示:removedFiledropzone.js

autoQueue: true,
addRemoveLinks: true,
      
removedfile: function(file) {
    var name = file.name;    
    name =name.replace(/\s+/g, '-').toLowerCase();    /*only spaces*/
    $.ajax({
        type: 'POST',
        url: 'dropzone.php',
        data: "id=" + name,
        dataType: 'html',
        success: function(data) {
            $("#msg").html(data);
        }
    });

    var _ref;
    if (file.previewElement) {
        if ((_ref = file.previewElement) != null) {
            _ref.parentNode.removeChild(file.previewElement);
        }
    }
    return this._updateMaxFilesReachedClass();
},
previewsContainer: null,
hiddenInputContainer: "body",

注意 我还在html中添加了一个消息框:()在HTML中,这将允许服务器端错误处理/删除也将消息发布回用户。div id="msg"></div>

在拖放区中.php:

if (isset($_POST['id']) {
    //delete/unlink file 
    echo $_POST['id'] . ' deleted'; // send msg back to user
}

这只是我这边工作代码的扩展。我有3个文件,dropzone.html,dropzone.php,dropzone.js

显然,你会创建一个js函数而不是重复代码,但由于命名更改,它适合我。您可以自己在 js 函数中传递变量来处理文件名空格/字符 /等。