Я использую Dropzone. Я хотел бы предотвратить загрузку файла, который уже существует в виде миниатюры в панели «Dropzone». При загрузке я имею в виду не разрешать одновременное отображение файла с тем же именем в панели. Меня не волнует случай с файлом, уже существующим на сервере, и не отображается в панели, так как он будет заменен новым с тем же именем.
Я не могу найти, как добиться этого, несмотря на мои усилия. Буду признателен за вашу помощь.
большое спасибо
Попробуй это. Недавно у меня была аналогичная проблема. Я делаю это с помощью этого.
Добавьте эти простые строки кода:
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); } } } });
Вот решение, к которому я пришел:
Добавьте эти два параметра в свою инициализацию Dropzone
dictDuplicateFile: "Duplicate Files Cannot Be Uploaded", preventDuplicates: false,
и добавить еще одну прототипную функцию и повторно реализовать вашу addFile
прототипа addFile
над инициализацией addFile
следующим образом:
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, если хотите.
Я проверяю сервер, если файл дублируется, а затем возвращает ошибку в dropzone, ee ниже:
$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); }
Следующее решение помогло мне:
this.on('addedfile', function(file) { setTimeout(function() { $(".dz-file-preview").remove(); // removes all files except images }, 3000); });