Загрузка файла ng2 не позволяет мне добавить тот же do c после того, как я удалил его из очереди - PullRequest
0 голосов
/ 23 января 2020

У меня небольшая проблема с 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 ()'

ODD BEHAVIOR - Если я добавлю первый файл ex. file1.txt, затем второй файл file2.txt, затем удалите file1.txt, а затем повторно, это разрешено и работает. Кажется, что это разрешено, если очередь не пуста. Но если очередь пуста, я не могу повторно добавить последний файл, который я пытался добавить!

CONCERN - я знаю, что могу сбросить очередь с помощью 'clearQueue ()', но если я есть другие предметы, все они будут удалены, поэтому я не хочу этого.

1 Ответ

0 голосов
/ 23 января 2020

Сначала я подумал, что это проблема загрузки файла ng2, это не так! Это проблема входного файла ...

Я добавил событие к своему вводу, и оно решило его.

onFileClick(event) {
  event.target.value = '';
}

<input (click)="onFileClick($event)" />
...