Ответ 1
Попробуйте это. Недавно у меня была аналогичная проблема. Я делаю это с помощью этого.
Я использую 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: true,
и добавьте еще одну функцию-прототип и повторно addFile
свою 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);
});