У меня небольшая проблема с ng2-file-upload. Я пытаюсь чтобы пользователь не мог загружать/использовать один и тот же файл дважды. То есть добавить тот же файл в очередь, но еще не загрузить его).
Так что я могу добавить такой документ
this.uploader = new FileUploader({
url: this.baseUrl + 'claim/document/' + this.claim.id,
authToken: 'Bearer ' + localStorage.getItem('token'),
// allowedMimeType: ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'],
maxFileSize: 15 * 1024 * 1024, // 15 MB
// headers: [{name:'Accept', value:'application/json'}],
isHTML5: true,
autoUpload: false,
});
this.uploader.onAfterAddingFile = fileItem => {
fileItem.withCredentials = false;
let docExists = false;
for (const doc of this.claim.data.generalDocumentDto) {
if (fileItem.file.name === doc.fileName) {
docExists = true;
this.alertService.warning('Document table already contains a file with name ' + fileItem.file.name);
// this.uploader.clearQueue();
this.uploader.removeFromQueue(fileItem);
break;
}
}
if (!docExists) {
// do some other stuff
}
};
<input type="file" #fileInput ng2FileSelect [uploader]="uploader" hidden/>
<button type="button" class="btn btn-primary" (click)="fileInput.click()">Upload File</button>
а затем я могу удалить его из очереди, как это, что, похоже, работает (я не вижу его в очереди) после вызова «removeFromQueue()»
for (const fileItem of this.uploader.queue) {
if (this.claimDocumentFileName === fileItem.file.name) {
this.uploader.removeFromQueue(fileItem);
break;
}
}
Но если я попытаюсь добавить его снова, откроется окно загрузки файлов, я выберу тот же файл, дважды нажму на него, а затем ничего не происходит!
Он не вызывает «onAfterAddingFile()», и если я смотрю в очередь, его там нет.
ВОПРОС. Есть ли что-то еще, что мне нужно сделать, чтобы разрешить загрузчику снова загружать этот же файл?
Я понимаю, что природа по умолчанию позволит мне добавлять один и тот же файл несколько раз, что я предотвращаю с помощью моей проверки onAfterAddingFile().
НЕЧЕТНОЕ ПОВЕДЕНИЕ. Если я добавлю первый файл ex. file1.txt, затем второй файл file2.txt, затем удалите file1.txt, затем прочитайте его, это разрешено и работает. Кажется, что это разрешено, если очередь не пуста. Но если очередь пуста, я не могу повторно добавить последний файл, который я пытался добавить!
ПРОБЛЕМА. Я знаю, что могу сбросить очередь с помощью 'clearQueue()', но если у меня есть другие элементы, все они будут удалены, поэтому я этого не хочу.