Laden...

Blazor + IIS - Datei Upload - NotReadableError

Erstellt von Palladin007 vor einem Jahr Letzter Beitrag vor einem Jahr 597 Views
Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr
Blazor + IIS - Datei Upload - NotReadableError

Guten Nachmittag,

ich habe eine InputFile (Server) Anwendung, in der man eine CSV-Datei auswählen und einlesen kann.
Die Anwendung verwendet dafür die InputFile Komponente und liest sie im Hintergrund in einen MemoryStream - da knallt es.

Folgendes zur Reproduktion:

  • Anwendung mit einem IIS starten - wichtig, nur IIS
  • Die Datei auswählt
  • Datei in Excel bearbeiten, speichern, aber Excel nicht beenden
  • Datei hochladen

Dann tritt folgender Fehler auf:

InvalidOperationException

An error occurred while reading the remote stream: NotReadableError: The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.

HResult: -2146233079
Keine InnerException

Ich kann den Fehler anhand der Meldung (nach "NotReadableError" suchen) gefiltert fangen und eine sprechende Meldung anzeigen?

Ich möchte wissen, womit das zusammenhängt, kann ich ihn ggf. ganz verhindern, sodass die Datei korrekt gelesen werden kann?
Gibt es eine bessere Möglichkeit, den Fehler eindeutig zu identifizieren, z.B. anhand des HResult und nicht nur der Message?

Schön wäre auch, wenn man die Datei nach dem Fehler nochmal hochladen kann, doch das geht scheinbar nicht ohne Workaround.

Danke und beste Grüße 😃

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.841 Beiträge seit 2008
vor einem Jahr

Grundregel für jede Art von File Upload: niemals im Speicher verarbeiten, sondern im Stream.
Verwendest Du den MemoryStream und damit den RAM, ist das ein potentieller Angriffspunkt für DOS - es skaliert einfach nicht.

Zum Problem: ist die Datei größer als der IIS unterstützt bzw. Deine aktuelle Web.Config (aktiv oder passiv) erlaubt?

Dein HResult ist ein allgemeiner Fehler, kein Fehlercode.
Daher für die Einschränkung ungeeignet. Im Endeffekt heisst das sowas wie ein "Any Error Occured".

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Grundregel für jede Art von File Upload: niemals im Speicher verarbeiten, sondern im Stream.

Hm - alles klar, nehme ich mit, danke für den Hinweis.

ist die Datei größer als der IIS unterstützt bzw. Deine aktuelle Web.Config (aktiv oder passiv) erlaubt?

Die Datei ist 1,22 KB groß, das sollte ja eigentlich kein Problem sein.
Und Hochladen klappt auch, das Problem tritt nur auf, wenn ich vor dem "Laden"-Klick bearbeite und speichere.

Dein HResult ist ein allgemeiner Fehler, kein Fehlercode.

Das hab ich mir schon gedacht - dann muss es bei der Message-Prüfung bleiben 😕

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.841 Beiträge seit 2008
vor einem Jahr

Deine Blazor-Anwendung läuft lokal, auf dem die Excel Datei offen ist?
Dann ist das evtl. ein Seiteneffekt, dass die Datei "lokal" verarbeitet wird.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Sowohl lokal, als auch auf einem Test-Server.
In beiden Umgebungen konnten wir es nachstellen.
Ich arbeite gerade nur lokal, weil es einfacher ist.
Die Datei wurde immer vom lokalen Datenträger (also kein Netzlaufwerk oder ähnliches) hochgeladen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Wir haben nochmal etwas getestet.

Es hat nichts damit zu tun, ob Excel offen ist.
Das Problem tritt immer auf, wenn die Datei nach dem Auswählen bearbeitet wird.

Eine Lösung haben wir noch nicht gefunden, ich zeige in dem Fall einfach nur eine etwas weniger hässliche Meldung an und lösche die Auswahl, damit der Benutzer die Datei erneut auswählen muss.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.