【发布时间】:2020-01-24 14:50:23
【问题描述】:
我正在通过 ngx-dropzone-wrapper 将 Dropzone 与 Angular 一起使用。
我没有直接从 Dropzone 使用上传,我只是让它收集文件,然后在我的代码中处理它们。
我需要将文件数限制为 1。所以我设置了config.maxFiles = 1。事实上,现在文件打开对话框只允许选择单个文件。但问题是 Dropzone 不会替换以前的文件!相反,它将新文件添加到其文件集合中,并带有接受=假(很可能,因为已达到 maxFiles)标志。这不是我所期望的。我需要config.maxFiles = 1 删除旧文件并添加新文件并接受它。
所以,我应该致电removeAllFiles(true) 来支持我的要求。但是我找不到任何在用户选择文件之后和 Dropzone 尝试处理它之前触发的事件处理程序。
那么,我该如何实现以下要求:
- 用户一次只能选择一个文件
- 如果用户出错并想选择另一个文件,新文件应替换之前选择的文件
?
【问题讨论】:
-
哪里可以放这个函数。 maxfilesexceeded:函数(文件){ this.removeAllFiles(); this.addFile(文件); },我是一个初学者,我不知道具体在哪里。谢谢
-
@simo9900 我是这样做的:
<div [dropzone]="config" (maxFilesReached)="maxFilesReached($event)" class="dropzone-top-layer"></div>然后在我的 Angular 组件中有一个函数:public maxFilesReached(event: any): void { this.dropzone.dropzone().removeAllFiles(true); } -
感谢您的回复。但它不起作用。它仅删除文件但不添加最新文件。你能把整个代码发过来吗?
-
@simo9900 您必须手动替换文件。在 dropzone 配置中,添加此方法
accept: this.localAcceptHandler。在该函数中,我手动将文件添加到我自己的集合`this.files = [file];`。我有变量public files: any = [];,后来我使用我的files而不是this.dropzone.dropzone().files。老实说,Dropzone 还有一些其他令人不快的怪癖(在内存中加载文件 blob 时难以显示进度,与 MatDialog 的错误集成无缘无故显示两次),我不会在下一个项目中使用它。
标签: angular file-upload dropzone.js