Wo ist der richtige Ort, um die von Benutzern beim Erstellen eines Webdienstes hochgeladenen Bilder zu speichern? ?? Es ist ein Dienst, der das Hochladen wie Instagram oder Pixiv erfordert, und selbst wenn dies nicht der Fall ist, denke ich, dass Sie häufig Fotos für Ihr Profil hochladen.
Tobidemo Als ich es geschafft habe, hatte ich Probleme beim Speichern der vom Benutzer hochgeladenen Bilder. Sobald Sie den Pfad kennen, in dem das Bild gespeichert ist, können Sie dem Pfad folgen und andere Bilder so oft sehen, wie Sie möchten! ?? Irgendwie fühlt es sich schlecht an. Ich habe versucht, es herauszufinden, aber ich hatte keinen Artikel wie Best Practice, daher habe ich zusammengefasst, wie ich ihn selbst untersuchen und implementieren kann.
Ich habe überprüft, wie die Webdienste in der Welt Bilder verarbeiten.
pixiv Es scheint, dass sowohl Abbildungen als auch Symbole nach Datums- und Uhrzeitinformationen + UUID verwaltet werden. Wenn die Anzahl der Verzeichnisse jeden Tag zunimmt, werden es in 5 Jahren 1825 Verzeichnisse, aber die Suchleistung hier ist gleich Ich frage mich, wie ich es verbessern kann.
Eine Illustration:
https: // i.pximg.net/img-original/img/ ** Datums- und Uhrzeitinformationen ** / 05/19 / ** Datums- und Uhrzeitinformationen ** / 32/55 / 608090000_p0.jpg
Symbol:
https: //i.pximg.net/user-profile/img/** Datums- und Uhrzeitinformationen ** / 02/20 / ** Datums- und Uhrzeitinformationen ** / 52/02 / 8996319_4b86000332fa62d00000392d64a00000_170.jpg;
instagram Instagram scheint eine Kombination von UUIDs zu verwalten. Der Weg ist lang.
Symbol:
https: //scontent-nrt1-1.cdninstagram.com/vp/26223423_148400000808676_7148163548756000000/5BC4422C/t51.2885-19/s150x150/26223423_148400000808676_7148163548756000000_n.jpg
Foto:
https:// scontent-nrt1-1.cdninstagram.com/vp/26223423_148400000808676_7148163548756000000/t51.2885-15/s640x640/sh0.08/e35/31232925_800900000769909_8151073854442100000_n.jpg
Die beiden oben genannten Dienste können Bilder herunterladen, indem Sie die URL im Browser eingeben. Es konnte nicht in Zoho Docs angezeigt werden. Das Symbol kann angezeigt werden. Natürlich werden private Bilder authentifiziert, wenn sie angezeigt werden.
Foto: https:// download.zoho.com/docs/prv/00000c661d00000f644738ec6a58018300000?_t=1526805269750
Symbol: https:// accounts.zoho.com/file?fs=normal&nocache=10000805400000
Von Benutzern hochgeladene Bilder werden unter Verwendung von UUID, Datum usw. als Pfade gespeichert. Für Dienste, die gemeinsam genutzt werden sollen, z. B. Image-Sharing-Dienste, Es ist schwer vorherzusagen, da UUID usw. für den Pfad verwendet werden. (Da es sich in erster Linie um öffentliche Informationen handelt, gibt es kein Problem, auch wenn dies vorhergesagt wird.)
Dienste, die privat verwaltet werden sollen, führen eine Art Authentifizierung für die Bildanzeige durch.
Es war ein sehr natürliches Ergebnis, aber ich fand heraus, wie man Bilder im Allgemeinen speichert.
Berücksichtigen Sie anhand dieser Informationen die Funktion zum Hochladen von Bildern und den Anzeigeteil. Tobi Demo ist ein Tool zum Erstellen von Software-Demos. In einigen Fällen können Sie ein Bild hochladen, das für Dritte veröffentlicht werden kann, und in BtoB möchten Sie es möglicherweise nur für eine bestimmte Person freigeben. Derzeit kann jeder, der die URL kennt, auf die Demo zugreifen. In Zukunft werden jedoch für jede Demo Zugriffsbeschränkungen auferlegt. Ich hatte auch damit gerechnet, es anzuziehen. Daher habe ich angenommen, dass es Bilder enthält, die nicht für die Öffentlichkeit freigegeben werden können.
Speichern Sie das Bild an einem Ort, auf den von außerhalb des lokalen Servers nicht zugegriffen werden kann, mit einem Pfad wie dem folgenden. Wenn Sie sich nicht registriert haben, wird das Bild in tmp gespeichert und innerhalb von 30 Tagen gelöscht. (Löschfunktion ist nicht implementiert) Wenn Sie als Benutzer registriert sind, wird das Verzeichnis anhand der Benutzer-ID und der Demo-ID getrennt. Das Bild wurde nachgeahmt, um eine 6-stellige UUID zu erzeugen und zu verwenden.
tmp/UUID.png Benutzer-ID / Demo-ID / UUID.png
Es war unangenehm, öffentliche NG-Bilder in einem Verzeichnis zu speichern, das extern veröffentlicht werden kann Zunächst habe ich mich für eine Speichermethode entschieden, auf die auch dann nicht zugegriffen werden kann, wenn ich den Pfad kenne.
Anstatt die URL zurückzugeben, wenn eine Bildanforderung vorliegt Indem Sie das Bild in eine Byte-Spalte konvertieren und vom Browser so lesen lassen, wie es ist Bilddaten können jetzt ohne Übergabe einer URL angezeigt werden.
Sie müssen nicht darüber nachdenken, auf das Bild zuzugreifen. Es scheint, dass die Zugriffssteuerungsfunktion implementiert werden kann, indem die Authentifizierung festgelegt wird, die ausgeführt werden soll, wenn der Demolink aufgerufen wird.
Ehrlich gesagt frage ich mich, ob das richtig war. Es könnte sinnvoll gewesen sein, nur die Bilder (Demo), die authentifiziert werden müssen, in einem separaten Verzeichnis abzulegen und dort zu authentifizieren. Ich frage mich, ob es kein Problem mit dem Laden gibt, wenn die Byte-Spalte direkt an den Browser übergeben wird. Ich denke, dass es nicht das Beste war. (Selbst wenn Sie den Link übergeben, werden die Daten trotzdem heruntergeladen und gelesen, sodass sie sich nicht ändern sollten.) Gibt es ein Buch, das das Wissen über die Bildverarbeitung von Webdiensten zusammenfasst? ..
Im Folgenden wird die Konvertierung in eine Byte-Spalte und deren Übergabe beim Anzeigen eines Bildes implementiert.
AddImgToDropZoneList.java
fileStream = new FileInputStream(user_folder + "/" + dropzoneList.get(i).getImg() + ".png ");
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] indata = new byte[10240 * 16];
int siz;
try {
while ((siz = fileStream.read(indata, 0, indata.length)) > 0) {
os.write(indata, 0, siz);
}
} catch (Exception e) {
//TODO automatisch generierter Fangblock
e.printStackTrace();
System.out.print("failed to read byte stream");
fileStream.close();
}
String base64 = new String(Base64.encodeBase64(os.toByteArray()), "ASCII");
// System.out.print(base64);
data = new StringBuffer();
data.append("data:image/png;base64,");
data.append(base64);
fileStream.close();
dropzoneWithImglist.add(new DropZoneWithImgBean(dropzoneList.get(i).getId(),
dropzoneList.get(i).getLinkid(), dropzoneList.get(i).getDropzone(),
dropzoneList.get(i).getImg(), data.toString(), width, height));
} else {
dropzoneWithImglist.add(new DropZoneWithImgBean(dropzoneList.get(i).getId(),
dropzoneList.get(i).getLinkid(), dropzoneList.get(i).getDropzone(),
dropzoneList.get(i).getImg(), "./../../img/default-none.png ", 1300, 1000));
}
Ich dachte, dass die Bilder lokal gespeichert wurden. Als ich mich für VPS entschied, entschied ich mich für einen Server mit viel Festplatte. Alle Bilder werden in S3 gespeichert. Ich bin froh, dass ich es dieses Mal lokal speichern musste, aber jetzt speichern wir das Bild in S3.
Recommended Posts