Ich suche gerade nach einem Dateiupload mit Java Server Faces. Ich habe diese großartige Einführung mit RichFaces gefunden. Allerdings habe ich einige Schwierigkeiten, den Prozess hier zu verstehen.
Zuerst wählt der Benutzer eine Datei aus und wenn der sofortige Upload auf true gesetzt ist, wird die Datei mit ajax verarbeitet, so weit so gut. Wenn es aber zum nächsten Schritt kommt, verwirrt mich der Listener auf der Bean-Seite folgendermassen:
%Vor%Der absolute Pfad ist zu einem temporären Verzeichnis auf meinem Computer, sicher verstehe ich das, aber wie würden Sie die Datei für die Webanwendung verfügbar machen? Meine Anwendung wird als WAR-Datei bereitgestellt. Ist es möglich, es in den WAR zu laden? Könnte klingen dumm oder so, aber es könnte tatsächlich praktisch sein.
Mir ist vollkommen klar, dass ich die Datei umbenennen kann, um sie an einen neuen Ort zu kopieren. Aber ist das der richtige Weg?
Dinge in Ihr WAR-Verzeichnis zu schreiben (vorausgesetzt, dass der WAR sogar als Verzeichnis explodiert ist), ist im Allgemeinen eine schlechte Idee (aus denselben Gründen ist das Speichern Ihrer Daten in Ihrem Anwendungsverzeichnis normalerweise eine schlechte Idee).
Sie möchten wahrscheinlich, dass es in einem Persistenzspeicher endet, normalerweise in einer Datenbank. Wie Sie das verwalten, hängt von Ihnen ab - ob Sie das Dateisystem verwenden und eine Referenz in der Datenbank speichern oder ein BLOB direkt in der Datenbank speichern und ob Sie JDBC oder JPA oder Hibernate usw. verwenden.
Die Liste der hochgeladenen Dateien könnte dann aus der Datenbank gelesen werden, indem das Panel aktualisiert wird, in dem sie enthalten sind, etwa mit <a4j:support event="onuploadcomplete" reRender="info" />
.
Ein Datei-Download-Servlet (wenn RichFaces keins hat) ist ziemlich einfach zu schreiben.
Nicht sicher, wie viel Hilfe das ist (und wahrscheinlich viel zu spät!), aber das ist der Code, den ich auf der Serverseite benutze, der Ihrem Hörer entspricht.
%Vor%Die große Frage, die Sie noch stellen müssen, lautet: "Wie würden Sie die Datei für die Webanwendung verfügbar machen?". Das Byte-Array ist sofort verfügbar. Wenn Sie die Datei erneut herunterladen möchten, können Sie sie als Link zu einer Methode in einer JSF-Sitzung / View-Bean wie:
bereitstellen %Vor%