Ahoj, mám problém při použití FileUpload komponenty z DotVVM.BusinessPack.Controls.
BusinessPack verzi FileUpload používám abych měl podporu pro upload dragnutím souboru. Mám FileUpload v nastavení na pouze upload jednoho souboru s událostí UploadCompleted, takto:
<bp:FileUpload Data="{value: UploadData}" AllowedFileTypes=".csv, .xlsx" AllowMultipleFiles="false" MaxFileSize="50" GenericErrorText="Import file upload error." UploadCompleted="{command: UploadCompleted()}" />
Při uploadu drágnutím souboru (nikoliv přes SelectFilesButton) se občas (náhodně) stane, že soubor při vyvolání události UploadCompleted vrací IsUploaded = false přítom pro malé soubory (např. 120 bajtů !!!).
Nejde to moc simulovat, ale zkoumal jsem čím je to způsobeno, a podle mě je chyba v souvislosti s knockout observable (kterému ale moc nerozumím) vlastnosti uploadData.Files. Stane se, že v onUploadStart se soubor nastaví přes setState, ale při onUploadComplete se v this.uploadData.Files.peek() ještě vrací prázdná kolekce (ale ve .state soubor je). Viz obrázek z ladění.
Výsledkem je, že se soubor nenajde a jde to do té větve s Matching file was not found a ve view modelu zůstane IsUploaded nastaven na false.
Asi by pomohlo dát tam volání onUploadComplete ještě přes settimeout., nebo nějak vynutit ten observable, aby už vracel správnou hodnotu.