Beste Weg zum speichern von Benutzer-hochgeladene Dateien in einer webapp
Ich bin erstellen einer web-Anwendung (in Django), die Benutzern das hochladen von Dateien (speziell Bilder, die später angezeigt, für andere Nutzer). Ich versuche zu verstehen, der beste Weg, um diese hochgeladenen Dateien.
Vom Verwandte Fragen sah ich einige Leute vorgeschlagen, die Datei mit einem server-erzeugt einzigartige id, die dann beim erstellen einer DB-Tabelle, die eine Zuordnung der ids zu den ursprünglichen Dateinamen.
Ist dies der beste Ansatz, um das speichern von Benutzer-hochgeladene Dateien, Sicherheit, Effizienz oder beliebigen anderen Standpunkt? Welche Informationen muss ich speichern zu jeder Datei?
Gibt es andere best-practices " beteiligt, mit der Annahme vom Benutzer hochgeladenen Dateien? (Andere als sicher, Sie sind wirklich die Bilder und die überprüfung Ihrer Größe, natürlich)?
Bearbeiten: Ein wenig mehr info über das, was ich brauche. Ich spreche speziell über Bild-Dateien, die Benutzer benötigen, um hochladen und einbetten in die Inhalte, die Sie erstellen. Vorstellen, dass es wie ein StackOverflow-Antwort (oder einen blog-post): lädt jemand ein Bild hat, werden gespeichert und angezeigt, wenn jemand anderes sieht, ist die Antwort.
Dank,
Edan
Hinweis: Es gibt mehrere Fragen, aber ich habe nicht einen gefunden, der fragt, für die ein Vergleich von Möglichkeiten zum speichern der Benutzer-hochgeladene Dateien.
- Hallo edan, ich bin kam das gleiche problem. Ich werde ein Programm erstellen, wo Benutzer können upload-images/PDF-Dateien. Dann können Sie Ansicht/herunterladen von Dateien. Ich denke der Datei-system-Speicher. Möchte nur wissen, welchen Weg hast du lieber aus deiner Erfahrung?
- Die Richtung, die ich Plane auf dem gehen ist: 1. Eine Datenbank, in der Sie "meta" info (original-Datei-name, etc.). 2. Physischen Dateien auf dem Datei-system, mit einem Namen, der den index in der db die meta-info. Es kann mehr als eine physische Datei für jeden db-Eintrag, durch die Art und Weise, entsprechend verschiedenen Auflösungen, zum Beispiel. E. g., Ich werde die Dateien: 254_high_res.jpg, 254_los_res.jpg, wo 254 ist der index in der Datenbank der meta-info für die Datei 254.
- danke edan. ich bin dabei, um Bilder zu speichern, die mit der radon-guid generiert Namen als Dateiname. und für die andere Auflösung, die ich nutzen werde-handler. dotnetslackers.com/articles/aspnet/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist zu breit, um wirklich hilfreich sein; am besten Vorgehen, hängt von Ihrer spezifischen Anforderungen. Dennoch...
Programmierer, die ständig versucht sind, um plonk Dateien in die Datenbank. Widerstehen. Es fügt nur eine Schicht von Komplexität, um alles, was Sie versuchen zu tun, mit Ihnen danach.
Meiner Erfahrung, während mit einem hashkey, wie das lokale mit dem Namen war meine Vorliebe, es hat nicht wirklich klappen, denn die Dateien waren nicht beschränkt auf Bilder: das nicht-die Bilder müssen einen Dateinamen zu dienen, wieder auf Benutzer, und der Uploader nicht besonders gern mit Ihren Dateien radikal umbenannt, da es macht es unmöglich für Sie zu wissen, welche Datei was ist.
Als für Bilder gibt es einige nicht-triviale Arbeit zu tun in der Skalierung auf verschiedenen Größen/thumbnails.
Das ist eine große Frage.
Rund um Ihr Bild zu verwenden-Fall ist dies die Domäne der Bild-server die in der Regel ist ein komplett separater Teil der Anwendung. Sie kümmern sich um das lifecycle-und Größenänderung der Bilder (ein Bild wird gespeichert/Größe verschiedene Größen). Soweit ich gesehen habe, wie nie umgesetzt wurde, die von einer BLOB-Spalte von SQL, sondern einfache normale Datei auf der Festplatte.
Haben auch einen Blick auf eine (Infrastruktur Beispiel von facebook)
Im Allgemeinen ist das Produkt zu richten, um Ihre konkreten Anforderungen (Dateigröße, Anzahl der Dateien, laden). In den meisten Fällen, die Sie wirklich nicht wollen, zu bauen, dass alle Sachen von vorne an... Obwohl, wenn Ihre Anforderungen unteren Ende (nur ein paar Benutzern das hochladen von Dateien selten), konnte man nur speichern Sie diese Dateien auf der Festplatte und speichern Sie den Pfad als Referenz in Ihren anderen Daten (z.B. Spalte in RDBMS).