it-roy-ru.com

как загружать и удалять файлы из dropzone.js

Я использовал приведенный ниже код, изображение было удалено, но уменьшенное изображение все еще отображается.

 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); 
    });
  }
48
Aaru

Для удаления миниатюр вы должны включить AddRemoveLinks: true, И использовать опцию «removefile» в dropzonejs

удаленный файл: вызывается всякий раз, когда файл удаляется из списка. Вы можете прослушать это и удалить файл с вашего сервера, если хотите.

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;        
              }

Это работает на моей стороне, поэтому я надеюсь, что это поможет.

86
6opko

в дополнение к лучшему ответу выше - чтобы убрать пробелы и заменить их тире и преобразовать в нижний регистр, примените этот js в файле dropzone.js:

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

к обработке имени файла - я отредактировал файл dropzone.js И вышеупомянутый вызов ajax. Таким образом, клиент обрабатывает именование файлов, и оно автоматически отправляется на сторону php/server, так что вам не придется его там переделывать, и его URL довольно безопасен.

В некоторых случаях js менялся в зависимости от функции/имени:

dropzone.js - строка 293 (приблизительно):

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

dropzone.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());
};

Я переместил весь раздел Удаленный файл в начало dropzone.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: (div id = "msg">) в html, что позволит обрабатывать и удалять ошибки на стороне сервера, чтобы отправить сообщение обратно пользователю.

в dropzone.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 самостоятельно для обработки пробелов в именах файлов/символов/и т.д.

0
Fstarocka Burns