7 Stimmen

Grails und Tomcat: Wo sollen hochgeladene Dateien im Dateisystem gespeichert werden?

Ich habe eine kleine Web-Applikation mit Grails geschrieben. Die resultierende Kriegsdatei wird auf einem Tomcat-Anwendungsserver bereitgestellt.

Die App verfügt über eine Upload-Funktionalität für Anhänge. Ich habe mich entschieden, die hochgeladenen Dateien auf der Festplatte zu speichern (anstelle von Blobs im DB zu speichern).

Zuerst habe ich einen Dateipfad im Webapp-Verzeichnis gewählt, um die Dateien zu speichern, aber dann habe ich realisiert, dass dieses Verzeichnis bei jedem Bereitstellen einer neuen Kriegsdatei überschrieben wird.

Gibt es eine Best Practice für "wo man hochgeladene Dateien im lokalen Dateisystem speichert"?

Vielen Dank für Ihre Hilfe.

0 Stimmen

Wenn Sie die Grails-Mailingliste lesen, werden Sie feststellen, dass ich genau dieselbe Frage hatte. Hoffe auf eine gute Antwort.

1 Stimmen

Könnten Sie bitte hier eine Lösung posten, wenn Sie etwas Nützliches aus der Mailingliste erhalten?

2voto

Sunny Punkte 1079

AlphaOne, wir tun etwas Ähnliches wie das, was Sie fragen, aber wir verwenden einen Apache-Webserver vor Tomcat. Wir holen den vollständigen Pfad aus der Konfigurationsdatei und schreiben darauf. Sagen wir "/tmp/branding". Dann holen wir auch den URL-Pfad für diesen Speicherort aus der Konfigurationsdatei (sagen wir "myapp/branding") und verwenden dies in unseren GSPs. Dann mappen wir in Apache App-Anfragen für diese URL ("myapp/branding"), um direkt zum Dateispeicherort zu gelangen und umgehen Tomcat.

1 Stimmen

Wort der Warnung, viele Betriebssysteme werden das tmp Verzeichnis gelegentlich löschen. Oft geschieht dies beim Booten, wenn eine bestimmte Anzahl von Tagen vergangen ist. Es kann unvorhersehbar erscheinen und kann schwierig zu debuggen sein.

2voto

kris Punkte 21

Erstellen Sie ein separates Projekt für den Upload und übergeben Sie den Benutzernamen zur Erstellung eines benutzerspezifischen Ordners. Fügen Sie von dem Hauptprojekt aus einen Link zu diesem Projekt hinzu, wenn der Benutzer die Dateien hochladen möchte.

1voto

codelark Punkte 12116

Ich würde empfehlen, eine Umgebungsvariable zum Speichern des Speicherorts zu verwenden, oder noch besser, eine Umgebungsvariable zum Festlegen des Speicherorts Ihrer Konfigurationseigenschaftsdatei zu verwenden und dort eine Eigenschaft zu setzen. Auf diese Weise wird der Speicherort vom Betriebsteam konfigurierbar, das sich um Dateisystem-/Konfigurationsanliegen kümmern sollte.

0 Stimmen

Klingt interessant, aber: Das Betriebsteam kann das Verzeichnis nur auf Pfade konfigurieren, die vom Anwendungsserver verarbeitet werden können. Wenn die Dateien beispielsweise in "/tmp/" gespeichert werden, kann der App-Server dieses Bild nicht an den Browser senden. Wo ist also ein guter Ort, der beide Anforderungen erfüllt: Der App-Server kann Dateien an den Browser senden UND das Verzeichnis wird bei Bereitstellung nicht überschrieben?

0 Stimmen

Sie sollten auch die Konfiguration des App-Servers/Web-Servers steuern. Wenn Sie auch den Inhalt zurückgeben müssen, sollte ein weiterer Konfigurationsparameter der URL-Standort des direkt gesendeten Verzeichnisses sein.

0voto

Peter De Winter Punkte 1133

Ich nehme an, du suchst nach einer bewährten Lösung. Nun, es gibt nicht wirklich eine, aber es gibt einige Orte, an denen du sie nicht platzieren solltest. Ich gehe von einer UNIX-Umgebung aus.

Zum Beispiel:

  • Das $CATALINA_HOME. Lass einfach den Anwendungsordner so wie er ist, verschmutze ihn nicht mit hochgeladenen Dateien.
  • /tmp. Du weißt nie, wer das aufräumen wird.

Obwohl es keine feste Spezifikation zu sein scheint, könntest du folgendes betrachten: Linux-Verzeichnisstruktur.

So wie ich es verstehe, hast du 3 Optionen:

  1. Wenn Tomcat mit einem dedizierten Benutzer läuft -> Das Benutzerverzeichnis. Zum Beispiel ~/Dateiuploads/Anwendungsname
  2. Da das Verzeichnis als wachsendes Verzeichnis von Anwendungsdaten angesehen werden könnte. Zum Beispiel: /var/Dateiuploads/Anwendungsname
  3. Überlasse es dem Systemadministrator. Schau dir das hier an: Grails-Konfiguration externisieren

Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X