2013-10-16 10 views
6

Ich baue eine MVC4-App mit einer separaten Datenbank-Multi-Tenant-Architektur. Die Kunden haben auch die Möglichkeit, Dateien hochzuladen (meist 1-5MB groß, Textdateien/Dokumente).Wo Benutzer hochgeladene Dateien in asp.net MVC 4 Webapp speichern?

Ich folgerte, dass es besser ist, die Dateien in einem Dateisystem zu speichern, während Metadaten in der Datenbank (separaten Ordner für jeden Kunden), jedoch habe ich keine Ahnung, wo die Dateien gespeichert werden. Hat MVC spezielle Standorte dafür? Oder sollte ich einfach irgendwo einen Ordner auf dem Server erstellen.

Und erstellt Ordner wie diese standardmäßig sicher?

Danke!

Antwort

4

Persönlich würde ich sagen, dass eine solche Entscheidung auf Ihren Anforderungen basieren sollte.

Wenn ich einfache App mit Uploadmöglichkeiten baue, verwende ich immer den DB = Metadaten; Datei selbst = Dateisystem, da ich ein Modul habe, das ich in jede App wie dieses implementiere, und es ist ein leicht zu wartender Ansatz. Es könnte möglicherweise Sicherheitsprobleme mit sich bringen, vor allem mit Multi-User/App Access Server, wo die Sicherheit des "Ordnerzugriffs" auf einer Root-Ordner-Ebene mit streng definierten Berechtigungen aufrechterhalten werden sollte (nicht chmod 777 alle :-)) Bisher habe ich nicht hatte ein einziges Problem mit diesem Ansatz. Der externe Zugriff ist durch eine externe GUID für eine bestimmte Datei verknüpft.

Für Multi-Tenant-Umgebung meine Datei-Datenbanken (oder ich nenne sie Medien-Datenbanken) enthält auch CDN URL, d. H. Adresse zum Server physisch hostet die Datei, und die Datei wird von HttpHandler bedient. Auch hier kann ich mir einen sichereren und flexibleren Weg vorstellen, aber das hat mich bisher nie im Stich gelassen, und ich bin mir der Probleme bewusst, die diese Lösung mit sich bringt, und mir geht es gut.

Aber da dies ein interessantes Thema für mich ist, würde ich gerne hören, wenn jemand eine andere Lösungen vorschlägt, wenn es um Filestorage geht.

8

Nun, ich würde für das Folgende empfehlen, gab Gitzerai bereits viel zu denken.

Gitzerai vielleicht finden Sie hier etwas, was Sie bei der Erstellung der Lösung für Ihre Anwendungen verpasst haben.

Wie dem auch sei,

können Sie Dateien auf dem Dateisystem hochladen, aber es gibt mehrere Dinge, die Sie zu achten.

  • Stellen Sie sicher, dass der IIS-Anwendungspoolkonto läuft nur über Lese- und Schreibrechte auf diesen Ordner und nicht ausgeführt werden unter keinen Umständen

  • überprüfen Dateierweiterung und nicht zuzulassen und ausführbare Dateien (.exe, .dll und mehr)

  • Speichern Sie die Dateien ohne Erweiterung oder mit einer .zzz-Erweiterung nur für den Fall. Wenn der Benutzer die Datei herunterladen muss, können Sie die ursprüngliche Erweiterung dynamisch festlegen.

  • Verwenden Sie nur einen Ordner zum Speichern aller Dateien, die manuell erstellt werden.Vermeiden Sie mehrere Ordner dynamisch zu schaffen, wenn nicht wirklich

    benötigt
  • eine separate App erstellen, die gelegentlich eine Integritätsprüfung für Datensätze in der Datenbank vs Dateien im Dateisystem

+0

Dank :) good stuff tun – user2713516

Verwandte Themen