Laden...

Bilder außerhalb des ASP.NET Projektes verwalten

Erstellt von JimStark vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.102 Views
JimStark Themenstarter:in
309 Beiträge seit 2020
vor 3 Jahren
Bilder außerhalb des ASP.NET Projektes verwalten

Hi,

angenommen ich habe ein ASP.NET Projekt mit dem ich Mitarbeiter verwalten kann und auch Bilder von Mitarbeitern hochladen kann. Also ein Mitarbeiter-Objekt hat dann ein zugehöriges Bild.
Die Frage ist wie verwaltet man das am effizientesten wenn die Bilder recht groß sind und wenn es recht viele Mitarbeiter Objekte geben kann?
SQL BLOB ist ja wahrscheinlich nicht gerade die schönste Lösung. Wie würdet ihr vorgehen?
In der ASP.NET Anwendung das Bild auf dem Dateisystem abspeichern und selbst verwalten?

Was noch eine Idee von mir wäre, man erstellt einen externen Dienst mit REST API, an den leite ich die Bilder weiter und der gibt mir dann bei der Abfrage eines Bildes die JSON Antwort mit seiner URL des Bildes und des Thumbnails. Das könnte dann in einem seperaten Docker Container und damit zur Not einfach auf einem zweiten Server laufen. Gibt es da schon was fertiges in der Art?

Danke im Voraus!

16.807 Beiträge seit 2008
vor 3 Jahren

Üblich ist das Speichern von Bildern auf einen Blob Storage; also einfach einen Dateispeicher.
Bei Webseiten siehst Du auch, dass die Urls von Bildern meistens auf sowas wie "static" oder "cdn" zeigen; da ist genau so ein Storage dahinter (übrigens auch das Forum hier).
zB https://cdn.mycsharp.de/resources/images/header/header_logo_3.png

Ist die günstigste und die performanteste Art Bilder für Webseiten abzulegen.
In den Folder der Anwendung darf es nicht landen. Eine Webanwendung sollte aus Sicherheitsgründen immer in einem read-only Folder betrieben werden und keinerlei Schreib-Access auf Dateiebene haben.

Bilder in Datenbanken ist das so ziemlich teuerste und unperformanteste, was man machen kann.
Und da dies auch extrem schlecht skaliert sind Dateien in Datenbanken bei fast allen Cloud-Produkten (AWS, Azure, GCP...) auch nicht supported bzw. deaktiviert.

87 Beiträge seit 2016
vor 3 Jahren

Hallo,

falls ein SQL-Server mit in Verwendung ist, kannst du dir auch die FILESTREAM-Option von diesem mal anschauen.

glandorf

JimStark Themenstarter:in
309 Beiträge seit 2020
vor 3 Jahren

Üblich ist das Speichern von Bildern auf einen Blob Storage; also einfach einen Dateispeicher.

Danke! Ich glaube das ist genau das was ich gesucht habe auch wenn es gerade noch etwas overpowered aussieht.

Falls jemand ähnliches vorhat, habe mir jetzt mal das rausgesucht:
https://github.com/minio/minio

Dafür gibt es auch eine .NET SDK:
https://github.com/minio/minio-dotnet

16.807 Beiträge seit 2008
vor 3 Jahren

Docker Container sind eigentlich nicht als Datengrab gedacht. Das liegt am Volume Mapping.
Daher sind Datenbanken auf Docker / Kubernetes auch nicht unbedingt empfohlen (Dont use Docker for production databases).
Das gilt prinzipiell für alle Art von Datenspeicherung in Containern.

Wenn Du Bilder für sowas auf AWS speichern willst, dann verwende besser nen S3 Bucket.
Wenn Du auf Azure bist, dann gibt es dafür den Blob Storage (mit einem Container).

In beiden Fällen setzt man für das Caching meistens noch ein CDN davor.
Bei AWS heisst das CloudFront CDN - bei Azure je nachdem zB Frontdoor oder direkt den Azure CDN.

Aber so richtig verstanden, was Du für eine Umgebung hast, hab ich nicht.

JimStark Themenstarter:in
309 Beiträge seit 2020
vor 3 Jahren

Danke für deine schnelle Antwort und die Info.
Also das Projekt wird eine Firmeninterne Software, die soll am besten mal in nem Docker Container laufen, auf den nur innerhalb des Firmennetzes zugegriffen werden soll. Die Bilder will ich da außerhalb speichern/verwalten, z.B. mit diesem Minio. Entweder in einem separaten Docker Container oder halt auf einem externen Server (aber auch im Intranet), je nach Beanspruchung.
Ich denke für dieses Vorhaben würde auch Docker reichen, sollte es nicht, könnte ich ja einfach den Blob Storage ohne Docker direkt auf einem extra Server einrichten oder?

16.807 Beiträge seit 2008
vor 3 Jahren

Der Sinn eines Storages ist ja nicht nur das Ablegen von Bildern sondern auch das Ausliefern der Fotos.
In einem Doku Container brauchst Du eine Anwendung, um auf Bilder "verlinken" zu können - also anzeigen zu können.

Ein Storage ermöglicht ein Direktzugriff ohne Compute.
Daher ist ein Storage in 99,9% der Fälle der empfohlene Weg.