2014-10-10 4 views
7

Я использую Dropzone. Я хотел бы предотвратить загрузку файла, который уже существует в виде миниатюры в панели «Dropzone». При загрузке я имею в виду не разрешать одновременное отображение файла с тем же именем в панели. Меня не волнует случай с файлом, уже существующим на сервере, и не отображается в панели, так как он будет заменен новым с тем же именем.Dropzone: предотвратить загрузку дубликатов файлов

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

Большое спасибо

+0

Возможный дубликат [Dropzone: предотвратить AddFile дважды] (http://stackoverflow.com/questions/27042588/dropzone-prevent-addfile-twice) – Tiger

+0

здесь: http://dropzone.w3clan.com/tutorial/409/check-duplicate-file-before-uploading –

ответ

2

Попробуйте это. Недавно у меня была аналогичная проблема. Я делаю это с помощью этого.

https://www.bountysource.com/issues/2993843-dropzone-did-not-check-the-duplicate-file-on-addfile?utm_campaign=plugin&utm_content=tracker%2F283989&utm_medium=issues&utm_source=github

+0

Спасибо большое! Он работает нормально. –

+0

добавьте код в ответ, потому что, как только ссылка мертвого ответа, не более полезно. –

+0

Ссылка мертва. Мне сейчас нужен этот ответ. Попробуем что-то еще, спасибо – marknt15

2

Я проверяю с сервера, если файл является дубликатом, а затем возвращая ошибку в DropZone, эи ниже:

$targetPath = '/tmp/my_dropzone_files'; 
$image_name = $_FILES['file']['name']; 
$targetFile = $targetPath . '/' . $image_name; 

     $file_exists = file_exists ($targetFile); 

     if(!$file_exists) //If file does not exists then upload 
     { 
      move_uploaded_file($tempFile, $targetFile); 
     } 
     else //If file exists then echo the error and set a http error response 
     { 
      echo 'Error: Duplicate file name, please change it!'; 
      http_response_code(404); 
     } 
10

Добавьте эти простые строки кода:

myDropzone.on("addedfile", function(file) { 
    if (this.files.length) { 
     var _i, _len; 
     for (_i = 0, _len = this.files.length; _i < _len - 1; _i++) // -1 to exclude current file 
     { 
      if(this.files[_i].name === file.name && this.files[_i].size === file.size && this.files[_i].lastModifiedDate.toString() === file.lastModifiedDate.toString()) 
      { 
       this.removeFile(file); 
      } 
     } 
    } 
}); 
+0

Да, но файл уже сидит на сервере ... Так что было бы лучше, чтобы он не был загружен. –

4

Вот решение, которое я пришло к:

Добавьте эти два варианта в вашей инициализации Dropzone

dictDuplicateFile: "Duplicate Files Cannot Be Uploaded", 

preventDuplicates: false, 

и добавить еще одну функцию прототипа и повторно реализовать Dropzone addFile прототипа функции выше инициализации Dropzone, как это:

Dropzone.prototype.isFileExist = function(file) { 
     var i; 
     if(this.files.length > 0) { 
     for(i = 0; i < this.files.length; i++) { 
      if(this.files[i].name === file.name 
      && this.files[i].size === file.size 
      && this.files[i].lastModifiedDate.toString() === file.lastModifiedDate.toString()) 
      { 
       return true; 
      } 
     } 
     } 
     return false; 
    }; 

Dropzone.prototype.addFile = function(file) { 
     file.upload = { 
     progress: 0, 
     total: file.size, 
     bytesSent: 0 
     }; 
     if (this.options.preventDuplicates && this.isFileExist(file)) { 
     alert(this.options.dictDuplicateFile); 
     return; 
     } 
     this.files.push(file); 
     file.status = Dropzone.ADDED; 
     this.emit("addedfile", file); 
     this._enqueueThumbnail(file); 
     return this.accept(file, (function(_this) { 
     return function(error) { 
      if (error) { 
      file.accepted = false; 
      _this._errorProcessing([file], error); 
      } else { 
      file.accepted = true; 
      if (_this.options.autoQueue) { 
       _this.enqueueFile(file); 
      } 
      } 
      return _this._updateMaxFilesReachedClass(); 
     }; 
     })(this)); 
    }; 

Вы также можете изменить ваш файл drozone, если хотите.

0

следующее решение помогло мне:

this.on('addedfile', function(file) { 
    setTimeout(function() { 
     $(".dz-file-preview").remove(); // removes all files except images 
    }, 3000); 
}); 
Смежные вопросы