Was ist der beste Weg, um Bilder hochzuladen und auf der Website zu speichern?

Lesezeit: 7 Minuten

Benutzer-Avatar
Niko

Ich habe keine Ahnung, wie die großen Websites die Bilder auf ihren Servern speichern. Kann mir jemand sagen, wie sie die Bilder speichern, die von den Benutzern in ihrer Datenbank hochgeladen werden?

Ich dachte, vielleicht würden sie die Datei (das Bild) einfach in einem Pfad speichern und diesen Pfad einfach in der Datenbank speichern, ist das richtig?

Aber ich will es so machen. Ist das richtig? Zum Beispiel eine Website mit dem Namen www.photos.com. Wenn ein Benutzer ein Bild hochlädt, würde ich einen Ordner mit dem Benutzernamen erstellen und diese Bilder in diesem Ordner speichern.

Ich glaube, wir können ein Verzeichnis mit erstellen php file concepts. Wenn also ein neuer Benutzer sein Bild oder seine Datei hochlädt, möchte ich ein Verzeichnis mit seinem Namen erstellen.

Beispiel: Wenn der Benutzername john ist, würde ich ein Verzeichnis wie dieses auf photos.com erstellen www.photos.com/john/ und speichert dann alle seine Bilder in diesem Verzeichnis, wenn er ein Bild hochlädt. Ist dies der richtige Weg, dies zu tun?

Ich habe hier niemanden, der sich gut mit dem Speichern der Dateien auf Servern auskennt. Lassen Sie mich also bitte wissen, wie das geht. Ich möchte es richtig und sicher machen.

  • @AdrianCornish Könnten Sie mir sagen, was Sie damit meinen, was Sie versucht haben? Ich bitte Sie nicht, einen Code für mich zu schreiben, ich möchte nur den Algorithmus oder den Prozess, dem die meisten Leute folgen, damit ich weitermachen kann, wenn ich weiß, was zu tun ist

    – Niko

    19. Januar 2012 um 6:48 Uhr


  • Nochmal was hast du probiert? Sie können einen Pfad zur Datei speichern, Sie können die Binärdaten in der Datenbank speichern. Was ist Ihre eigentliche Frage?

    – Adrian Kornisch

    19. Januar 2012 um 6:51 Uhr

  • Ihre Frage ist schlecht formuliert – Sie fragen, wie Sie Bilder hochladen können. Nicht, wie man Bilder speichert, die auf Ihre Website hochgeladen werden. Was tun Sie auch, um Benutzer vor dem Hochladen von bösartigem Code und Bildern mit versteckten Payloads zu schützen und zu verhindern, dass Leute einfach alle Ihre Bilder von einer indexierbaren URL abrufen?

    – Adrian Kornisch

    19. Januar 2012 um 6:55 Uhr

  • das Wort „Datenbank“ hat eine besondere Bedeutung. und Sie haben jeden in die Irre geführt, der versucht hat, Ihre Frage zu beantworten. Das ist jedoch ihr Problem, da sie die Frage nicht wirklich gelesen haben

    – Ihr gesunder Menschenverstand

    19. Januar 2012 um 8:43 Uhr

  • @Frankie Entschuldigung, ich weiß es nicht, aber ich habe Ihre Antwort akzeptiert und danke, dass Sie mich wissen lassen, dass ich Ihre Hilfe bei der Antwort sehr zu schätzen weiß. Danke Frankie

    – Niko

    20. Januar 2012 um 19:04 Uhr

Benutzer-Avatar
Frankie

Alle großen Websites Bilder nicht in der Datenbank speichern Sie speichern sie auf der Festplatte. Sie speichern einen Verweis auf die Position des Bildes in einer Tabelle. Und dann von dort verlinken.

Wieso den? Leistung.

Das Abrufen umfangreicher Inhalte aus einer Datenbank ist ein enormer Leistungsengpass. Und Datenbanken lassen sich horizontal nicht so gut skalieren, was ein noch größeres Problem bedeuten würde. Alle großen Websites verwenden statische Inhaltsfarmen, um mit statischen Inhalten wie Bildern umzugehen. Das sind Server, denen Ihre Identität egal ist.

Wie halten sie die Bilder wirklich privat, fragen Sie sich vielleicht? Sie tun es nicht.

Der Link des Bildes ist selbst die Adresse und das Passwort. Nehmen wir zum Beispiel Facebook. Wenn ich ein privates Bild auf meinem Konto speichere, sollten Sie es nicht öffnen können. Aber solange Sie die richtige Adresse haben, können Sie.

Dieses Bild ist privat. Achten Sie auf den Dateinamen
10400121_87110566301_7482172_n.jpg
(Facebook ändert die URL von Zeit zu Zeit, sodass der Link möglicherweise unterbrochen wird)

Es ist nicht sequentiell. An das Bild kommt man nur, wenn man die Adresse kennt.
Basierend auf einem vorherigen Benutzerfoto können Sie das nächste nicht erraten.
Es hat eine enorme Entropie, selbst wenn Sie anfangen, zufällige wilde Vermutungen anzustellen, werden Sie eine beträchtliche Anzahl von Fehlern haben, und wenn Sie zu einem Bild gelangen, werden Sie von dort aus nicht in der Lage sein, die Identität des Eigentümers zu erkennen, die, an sich ist Schutz in Anonymität.

Bearbeiten (warum Sie Bilder nicht in einem “Benutzernamen”-Ordner speichern sollten:

Nach Ihrer Bearbeitung wurde klar, dass Sie beabsichtigen, Dateien auf der Festplatte und nicht in der Datenbank abzulegen. Diese Bearbeitung deckt das neue Szenario ab.

Auch wenn Ihre Logik (Erstellen eines Ordners pro Benutzer) organisierter scheint, führt dies zu Problemen, wenn Sie anfangen, viele Benutzer und viele Bilder zu haben. Stellen Sie sich vor, Ihre Server verfügen über 1 TB Speicherplatz. Und stellen wir uns auch vor, dass 1T mehr oder weniger genau mit der Last ist, die der Server bewältigen kann.

Jetzt haben Sie 11 Benutzer, nehmen Sie an, dass sie gleichzeitig mit dem Hochladen beginnen und jeder mehr als 100 GB an Dateien hochlädt. Wenn sie jeweils 91 GB erreichen, ist der Server voll und Sie müssen damit beginnen, Bilder auf einem anderen Server zu speichern. Wenn dieser Benutzer-/Ordnerstruktur gefolgt wird, müssten Sie einen der Benutzer auswählen und alle seine Daten auf einen anderen Server migrieren. Außerdem setzt es einem Benutzer, der nicht mehr als 1 TB an Dateien hochladen kann, ein hartes Limit.

Sollte ich dann alle Dateien im selben Ordner speichern?

Nein, große Websites speichern Dateien im Allgemeinen in aufeinanderfolgenden Ordnern (/000001/, /000002/ usw.) mit einer x definierten Anzahl von Dateien pro Ordner. Dies gilt hauptsächlich für Leistungsprobleme des Dateisystems.

Mehr dazu Wie viele Dateien in einem Verzeichnis sind zu viele?

  • BRILLANTE Erklärung. Genau das, wonach ich gesucht habe, danke.

    – CyberJunkie

    11. Juli 2012 um 2:24 Uhr

  • Danke Frankie, das ist in der Tat sehr klar. Aber es gibt einen anderen Weg, der mich interessanter finden sollte: Speichern Sie die Bilder bei einem bestimmten Bildspeicheranbieter.

    – Fred

    15. Dezember 2016 um 10:37 Uhr


  • @Fred absolut wahr. Diese Antwort wurde speziell entwickelt, um jemandem, der keine Ahnung hat, wie die Dinge funktionieren, die richtige Denkweise zu vermitteln. Sobald Sie anfangen, ein paar Millionen Bilder auf Ihrer Website zu hosten, möchten Sie wahrscheinlich das Problem aufteilen und/oder das Hosting dieser Assets auslagern. Die Denkweise bleibt jedoch die gleiche. In der Datenbank verweisen Sie nur auf den Bildspeicherort. Danke für den Kommentar.

    – Frankie

    15. Dezember 2016 um 16:33 Uhr

Es ist normalerweise keine gute Idee, Bilder in Ihrer Datenbank zu speichern (wenn Ihre Website beliebt ist). Die Datenbank ist traditionell einer der Hauptengpässe in den meisten Anwendungen da draußen. Sie müssen es nicht mehr als nötig laden. Wenn sich Bilder im Dateisystem befinden, werden viele HTTP-Server (nginxzum Beispiel) wird ihnen am effizientesten dienen.

Das größte soziale Netzwerk in Russland, Vkontakte macht genau das: Bilder im Dateisystem speichern.

Ein weiteres großes soziales Netzwerk implementierte einen ausgeklügelten skalierbaren Blob-Speicher. Aber es ist nicht für die Öffentlichkeit zugänglich, AFAIK.

Zusammenfassung dieser Antwort: Speichern Sie keine Blobs in der Datenbank.

ist das der richtige weg

Ja.
Das einzige, was ich vorschlagen würde, ist, nicht den Namen, sondern die ID zu verwenden.
www.photos.com/albums/1234/ wäre für den Anfang ok.

Die Bildverwaltung kann am besten erreicht werden, indem Bilder physisch auf den Server hochgeladen werden und dann der Dateispeicherort und die Bilddetails in einer Datenbank aufgezeichnet werden. Anschließend könnte ein Suchformular konfiguriert werden, um dem Benutzer zu erlauben, eine Textsuche, Teilenummernsuche oder andere Abfragen durchzuführen. Ein PHP-Skript könnte geschrieben werden, um basierend auf den in der Tabelle gefundenen Daten ein gültiges HTML-Bild-Tag zu erzeugen.

Das Hochladen von Bildern in ein MySQL™ BLOB-Feld ist eine so schlechte Idee, dass solche Bilddaten im Allgemeinen problematisch sind, wenn die Bilder viel größer als Thumbnails sind. Wenn die Bilder groß sind, müssen Sie möglicherweise jeweils eine SQL INSERT-Anweisung kopieren/einfügen (in phpMyAdmin). Wenn die Bilder groß sind und die SQL-INSERT-Anweisung von Ihrem Texteditor in zwei Zeilen aufgeteilt wird, können Sie das Bild nie wiederherstellen.

1349380cookie-checkWas ist der beste Weg, um Bilder hochzuladen und auf der Website zu speichern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy