Laden...

Wie kann ich aus Blazor WebAssembly lokale Dateien bearbeiten?

Erstellt von pollito vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.772 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren
Wie kann ich aus Blazor WebAssembly lokale Dateien bearbeiten?

Hallo!

Vorab: In Sachen ASP.NET, Blazor und Webassembly bin ich absoluter Neuling.

Seit einiger Zeit lese ich sehr viel über die neuen Möglichkeiten, die diese Technologie bietet. Ich finde sie total spannend und vielversprechend. Ich sehe auch ein großes Potential darin, ohne seine gewohnte Programmiersprache verlassen zu müssen. Klar, HTML und CSS wollen auch beherrscht werden, aber ich muss nicht noch ein JavaScript-Papst werden.

In den letzten Tagen habe ich viele Vorträge gesehen und einige Beispiele durchstudiert, jedoch bis auf ein Beispiel, welches auf einer fertigen Vorlage basiert, habe ich noch nichts programmiert. Das kommt aber als nächstes.

Nun gibt es eine Frage, die mich beschäftigt, welche ihr mir vielleicht schon jetzt beantworten könnt. Man liest, dass eine Webassembly-Anwendung in einer Sandbox läuft und somit keinen Zugriff auf lokale Ressourcen hat. Wie löst man dann dies, wenn man doch lokal eine Datei lesen oder schreiben muss?

Im voraus vielen Dank und gesunde Grüße!

René

2.207 Beiträge seit 2011
vor 3 Jahren

Hallo pollito,

IIRC: Blazor WebAssembly läuft genauso im Browser wie beispielsweise Javascript. Der Browser ist eine Sandbox. Du kannst lokal keine Daten bearbeiten, nur über den WebServer. Das wäre ein Security-Issue imho. Es gibt aber eine FileAPI, die ist aber noch im Trial: https://web.dev/native-file-system/

Gruss

Coffeebean

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Vielen Dank!

Das Projekt ist noch sehr jung und bisher nur für Chrome. Aber mir reicht es schon, wenn ich weiß, dass dies ohne weiteres vom Design her nicht möglich ist. Mir geht es in erster Linie darum, die Funktionsweise und die dahinter stehende Philosophie zu verstehen.

Wie sieht es mit Up- und Downloads aus? Also kein direkter Dateizugriff, sondern einfach den Ihnalt einer Datei in die Anwendung (durch Benutzerinteraktion) uploaden. Oder Daten per Download auf das Dateisystem speichern?

Danke un lG

René

2.207 Beiträge seit 2011
vor 3 Jahren

Hallo pollito,

ich habe bisher noch keinen Up- und Download umgesetzt, aber es hindert dich nichts dran mit Javascript zu arbeiten und das umzusetzen. WASM und Javscript können miteinander reden, Blazor bietet dafür Interops an. https://docs.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-3.1

Steven Sanderson, der das ganze auch nach aussen sehr stark vorantreibt, hat noch einen vielleicht interessanten Artikel geschrieben: https://blog.stevensanderson.com/2019/09/13/blazor-inputfile/

Blazor benutzt WebAssembly. WebAssembly und Blazor sind aber erstmal zwei verschiedene paar Schuhe.

Generell beschreibt WebAssembly einen offenen Code-Standard, der von Browsern nativ(!) unterstützt wird. Du kannst Code in C++, Rust, C# schreiben und er kann im Browser ohne Plugin ausgeführt werden. Web bleibt Web. Mit allen Vor- und Nachteilen. Nur kannst du auf einmal C# (C++, Rust, ... statt Javascript) verwenden, um weite Teile deiner Logik abzubilden. Das ist natürlich für manche recht sexy. (Keine "Javascript ist gut/schlecht"-Diskussion bitte).

Zu deinem initialem Problem habe ich noch das hier https://github.com/WICG/native-file-system/issues/139 gefunden. Vielleicht hilft es.

Gruss

Coffeebean

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Moin und danke!

Keine Frage, ich bin der letzte, der einen Programmiersprachenkrieg beginnen möchte. Wie ich eingangs beschrieb, bin ich auf diesem Gebiet ein absoluter Neuling. Ich freue mich aber, wenn ich neben HTML und CSS nicht zusätzlich eine weitere Programmiersprache mit samt ihrem Kosmos erlernen muss.

Der Artikel von Steven Sanderson ist in der Tat super spannend´– danke dafür!

Zu deinem initialem Problem habe ich noch das hier
>
gefunden. Vielleicht hilft es.

Auch total spannend.

Nun muss ich beginnen, die ersten, zarten Schritte zu machen.

Lieben Dank und ein schönes Wochenende!

René

T
73 Beiträge seit 2004
vor 3 Jahren

Hi

HTML und CSS sind keine Programmiersprachen sondern Sprachen um Formate und Gestaltung von Hypertext zu beschreiben.

Eine Programmiersprache beschreibt die Logik eines Programms das auf einer universellen Maschine zur Speicherung und Verarbeitung von (digitalen) Daten ausgeführt wird.
Also schlichtweg ein Prozessor, CPU, AMD, ARM, Intel usw. aber auch eine ausgedachte CPU die es gar nicht als Chip gibt. Dann spricht man von einer Virtuellen Maschine.

WASM ist KEINE Programmiersprache sondern eine Virtuelle Maschine die einen bestimmten OP Code ausführen kann. Um ein Programm für diese VM zu schreiben benötigst du einen Compiler der eine bestimmte Programmiersprache (C, C++, C#, JAVA, Rust, was auch immer...) in den WASM OP Code übersetzt. Das Resultat ist eine Datei (Binärcode) die in den Speicher der WASM VM geladen wird und dann ausgeführt werden kann.

Um also Programme für die WASM im Browser schreiben zu können brauchst du eine Infrastruktur: eine IDE um Programm Code eingeben zu können, einen (oder mehre) Compiler, einen Debugger um auf die Suche nach Fehlern zu gehen.
(Ich benutze dafür VS Code, was ich an dieser Stelle wirklich empfehlen kann.)

Eine WASM Anwendung besteht aus mehreren Teilen:

einem Teil der die Benutzeroberfläche (UI) beschreibt. Das ist i.d.R. der HTML/CSS Teil

die eigentliche Logik des Programms die sich wiederum aus Javascript und WASM Teilen zusammensetzt.

Und, da wir uns ja in einem Vernetzten Szenario befinden, auch noch einen oder mehrere (Web) Server die Daten an die Anwendung ausliefern bzw. empfangen.

Aktuell gibt es meines Wissens nur eine wirklich komplett integrierte Technologie mit der Client seitige WASM Anwendungen gebaut werden können: C# BLAZOR Web Assembly
(deswegen sind wir ja auch auf diesem Forum)

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Danke! Das ist schon klar. Ich programmiere bisher Desktop-Anwendungen unter Zuhilfenahme von (früher) Windows-Forms und heute WPF. Parallel dazu auch SQLWindows (Team Developer) von Gupta. Ich habe nicht behauptet, dass HTML und CSS Programmiersprachen seien, sondern dass ich das lernen muss, wie vor vielen Jahren XAML für WPF.

Ich sehe es schon, der Weg wird steinig werden, aber das Lamentieren hilft kein bisschen weiter – da müssen wir durch.

Schönes Wochenende!

René

16.806 Beiträge seit 2008
vor 3 Jahren

Aktuell gibt es meines Wissens nur eine wirklich komplett integrierte Technologie mit der Client seitige WASM Anwendungen gebaut werden können: C# BLAZOR Web Assembly

Nö, gibt auch JavaScript, C++, Rust... Frameworks, die all das können, was auch Blazor Client Side kann.

Aber das ist ja nicht Thema dieses Threads.

T
73 Beiträge seit 2004
vor 3 Jahren

Oki

Dann probier alt einfach mal Blazor aus.
UI ist halt HTML mit Bootstrap aber eigentlich alles recht gut verständlich.

Nochmal zu deiner ursprünglichen Frage.
Es ist schon möglich mit PWAs Dateien lokal zu halten und zu bearbeiten. Aber halt nicht via Filesystem direkt auf die Platte sondern indirekt. Also erst Upload, der wird dann lokal im Browser Cache gehalten, auch wenn der Rechner Offline ist. GDocs ist ein Beispiel dafür und funktioniert gut. Wobei der Sync via GDrive erfolgt.

Ist das für dein Anwendungsszenario unbedingt nötig?

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Nicht wirklich. Ich/wir bin/sind am Ausloten der Möglichkeiten, die diese (für uns) neue Technologie bietet.

Wir haben schon die Notwendigkeit, Dateien auf dem Filesystem zu bearbeiten, das kann aber auf den Server ausgelagert werden. Wenn ich das richtig verstanden habe, gelten bei ASP.Net Core diese Einschränkungen nicht.

Ich persönlich hoffe, dass diese Technologie keine Eintagsfliege wird – kann mir auch nicht wirklich vorstellen. Daher setzt sich diese Technologie gegenüber den anderen, meist auf JavaScript basierenden Frameworks, bei uns gedanklich durch.

Ich bleibe euch dann sicher noch eine Weile erhalten und werde euch ab dem Herbst des öfteren mit diesem Thema nerven.

Liebe Grüße und ein schönes Wochenende!

René

16.806 Beiträge seit 2008
vor 3 Jahren

Also erst Upload, der wird dann lokal im Browser Cache gehalten, auch wenn der Rechner Offline ist. GDocs ist ein Beispiel dafür und funktioniert gut.

  1. GDocs ist keine WASM Applikation sondern eine stink normale PWA; an manchen Stellen sogar noch ganz normal (aka altmodisch) über die .appcache-Schnittstelle und entsprechenden Manifesten
  2. Bitte nicht Application Cache und Browser Cache verwechseln. Das sind unterschiedliche Dinge mit unterschiedlichen Aufgaben und für unterschiedliche Szenarien. Hinzu kommen noch Application Storage, Local Storage, Session Storage....
2.207 Beiträge seit 2011
vor 3 Jahren

Hallo pollito,

Wenn ich das richtig verstanden habe, gelten bei ASP.Net Core diese Einschränkungen nicht.

Das verstehe ich nicht ganz. Welche Einschränkungen gelten bei ASP.NET Core nicht?

Gruss

Coffeebean

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Das verstehe ich nicht ganz. Welche Einschränkungen gelten bei ASP.NET Core nicht?

Ich meine den Zugriff auf Ressourcen wie z. B. Dateien. Die ASP.Net-Anwendung kann nach Gusto auf Dateien auf dem Server zugreifen. Für unsere Anwendung dürfte das ausreichend sein.

Ich habe heute einen Online-Kurs bei Udemy gebucht:

Programando en Blazor - ASP.NET Core 3.2

Sollte dir das Spanisch vorkommen, ist es auch! Mein Spanisch ist weitaus besser als mein Englisch und in Deutsch gibt es sowieso nichts. Ich hoffe nur, dass ich jetzt genug Zeit neben der Arbeit finde, um mir das reinzuziehen.

Grüße

René

16.806 Beiträge seit 2008
vor 3 Jahren

Puh, hier sind sehr sehr viele Basics aufzuholen.

Nein, eine ASP.NET Anwendung kann (oder zumindest sollte) keine lokalen Dateien bearbeiten. Nirgends.
Eine Webanwendung sollte auf einem Server immer so konfiguriert sein, dass alle Dateien im Web-Verzeichnis read-only sind - ganz ähnlich wie bei jeder Anwendung, auch auf dem Desktop.
Und überhalb des Web-Verzeichnis sollte es sowieso keinerlei Access geben.
Alles Security Basics für das Hosten von Webapplikationen.

Im Web arbeitet man daher mit entsprechenden Storages (zB. Azure Blob Storage, AWS S3 und wie sie nicht alle heissen); nicht direkt mit dem Dateiverzeichnis der Anwendung.
Und ob ein Storage nachher über eine Webanwendung oder über eine Client-Anwendung angesprochen wird: völlig egal.

Nimm Dir für die Basics Zeit, ansonsten wirds mit der Evaluierung und der Konzeption schwierig.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Ne, hier reden wir gerade, was dieses Dateithema angeht, aneinander vorbei. Es kann auch sein, dass ich mich nicht fachgerecht genug ausdrücke und daher zu Missverständnissen kommt – ich schrieb am Anfang, dass ich auf diesem Gebiet ein absoluter Neuling bin.

Eine auf einem Server laufende ASP-Anwendung darf wohl uneingeschränkt auf lokale Ressourcen zugreifen – mehr wollte ich auch nicht sagen.

Unsere Server-Anwendung verarbeitet Dateien, die auf einen Server abgelegt werden – das meine ich. Hier tat sich die (theoretische) Frage auf, wie eine Blazor-Webassembly-Anwendung auf einem Endgerät auf lokale Dateien zugreifen könnte. Diese Frage wurde jedoch sehr gut beantwortet – eigentlich erhielt ich netterweise sogar weiterführende Infos, die dieses Thema viel breiter aufgreifen.

Und ja, wir müssen uns mit Basics beschäftigen, da dieses Thema wir bis dato nicht hatten. Unser Schwerpunkt liegt bisher im Client-Server-Umfeld mit fetten Windows-Clients und SQL-Datenbanken. Das dies nicht mehr Stand der Technik ist, ist es uns klar. Nun steht bei uns für die nächsten Jahre sowieso ein Re-Design unserer Hauptanwendung an, so dass wir diesen Zwang nutzen wollen, um auf eine Web-Technologie umzusatteln.

Danke und viele Grüße!

René

16.806 Beiträge seit 2008
vor 3 Jahren

Eine auf einem Server laufende ASP-Anwendung darf wohl uneingeschränkt auf lokale Ressourcen zugreifen – mehr wollte ich auch nicht sagen.

Nein, darf sie nicht (so ohne weiteres). Siehe Begründung in mein Beitrag.

Eine Web-Anwendung ist bis auf wenige Ausnahmen immer im Multi-Threading, sodass man bei einem direkten Dateizugriff sehr viel mehr beachten muss als bei einer kleinen simplen Desktop-Anwendung - von den Sicherheitskonzepten einer Webanwendung ganz zu schweigen.

309 Beiträge seit 2020
vor 3 Jahren

Angenommen ich will das so machen, wie würde man das machen?
Eine seperate Anwendung, die lokal einen HTTP API Endpoint aufmacht und intern queuing benutzt? Und die dann halt mit der ASP.NET Anwendung ansprechen? Oder gibt es da ein bessere Protokoll dafür?

16.806 Beiträge seit 2008
vor 3 Jahren

Von was sprichst Du?

309 Beiträge seit 2020
vor 3 Jahren

Von genau seinem Beispiel,
angenommen ich will mit der ASP.NET Anwendung auf dem selben Host auf Dateien oder ähnliches zugreifen. Würde man dann eine zweite Anwendung schreiben mit der die ASP.NET Core Anwendung kommuniziert und die das erledigt oder nochmal ganz anders?

16.806 Beiträge seit 2008
vor 3 Jahren

Kommt auf die Gesamtanforderungen an. Gibt nicht nur einen Weg.