Datei erzeugen und auf der Weboberfläche downloaden (Tomcat)

Admiral Helmut

Aktives Mitglied
Hallo liebe Leute,

sitze vor einem Problem. Vielleicht könnt ihr mir helfen.

Habe folgende Architektur:
Ein Embedded Tomcat wird über eine ganz normale Jar gestartet. Wahrscheinlich ist es für das Problem egal ob dieser embedded ist. Dieser WebServer hostet eine Website zur Steuerung. Website und Server kommunizieren über WebSockets. D.H. WebServer hostet auch (um genau zusein) einen Spring WebSocket Endpoint.

Dazu gibt es im Hintergrund einen Haufen Logik der die Ergebnisse an den WebSocket Endpoint sendet und dadurch zur Gui.


Nun möchte ich die Ergebnisse nicht nur anzeigen. Ich möchte bereits auf dem WebSocket Endpoint die Ergebnisse in eine Datei schreiben (denke .csv), diese dann auf dem WebServer speichern und auf die Website einen Link setzen, der den Download der Datei anbietet.


Nun weiss ich nicht ob das so funktionieren kann wie ich mir das vorstelle. Was meint ihr?

Ich denke der Download sollte kein Problem sein wenn ich es schaffe die Datei in den gleichen Ordner auf dem WebServer zu speichern wie die html files. Aber wie speichere ich die Datei vom WebSocket Endpoint direkt in den (bei mir static) Ordner auf dem WebServer.

Die Klassen für den Endpoint liegen ja auf dem gleichen WebServer. Könnte ich nicht über getclass etc den Path bestimmen und dann per ".." zurück navigieren und zum entsprechenden Ordner und dort das File ablegen?


Vielen Dank für eure Bemühungen.

mit freundlichen Grüßen

Helmut
 

stg

Top Contributor
Direkt in der WebApp würde ich gar keine Files ablegen. Bei jedem Redeployment musst du sonst tierisch aufpassen, dass nicht alles gelöscht wird. Was hindert dich daran einfach mit absoluten Pfaden zu arbeiten? Den content aus diesem (externen) folder kannst du ja per Servlet mappen, so dass du auch aus dem web app context darauf zugreifen kannst, wenn das notwendig ist. Wenn du das nicht per Servlet machen willst, kannst du ja auch per Hand direkt das File in den http response schreiben.
 

Admiral Helmut

Aktives Mitglied
Hallo stg,

erstmal vielen Dank für die Antwort.

Hab ich das richtig verstanden? Mit extern meinst du irgendwo auf dem Rechner, auf dem der WebServer gestartet ist. Also zum Beispiel direkt neben die Jar.

habe leider keine Ahnung von Servlets. Kann mir gerade noch nicht vorstellen wie ich das File dann zum Download anbieten soll. Dachte mir ich setzte einfach einen Link auf das File.

Das File in einen externen Ordner schreiben und laden ist kein Problem.

Funktioniert das irgendwie so:

Man baut auf dem Webserver eine Servlet Klasse. Diese bekommt eine Get Methode. In dieser prüft man ob die angefrage Ressource der Ergebnisdatei entspricht. Dann lädt man diese Datei vom externen Folder und schreibt den Text in die Response?
Bin ich da auf dem richtigen Weg? Dann müsste ich noch schaun wie man ein Servlet richtig registriert und ein Get von der Website aus auslöst.

Vielen Dank für deine Antwort


Gruß Helmut
 

stg

Top Contributor
Genau so war das gemeint, ja.

Ich hab gerade mal gekramt und bin in einem alten Projekt noch fündig geworden. Kannst du dir gerne nach deinen Bedürfnissen anpassen:

Java:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/download/*")
public class FileServlet extends HttpServlet {

    private static final String FOLDER = "D:\\PUBLIC";
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                                       throws ServletException, IOException {
        String filename = request.getPathInfo().substring(1);
        File file = new File(FOLDER, filename);
        response.setHeader("Content-Type", getServletContext().getMimeType(filename));
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response
            .setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
        Files.copy(file.toPath(), response.getOutputStream());
    }

}

Ich denke, der Code erklärt sich von selbst, wenn es doch Rückfragen gibt, dann stell sie einfach :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
T Mit FTP verbinden, einen Ordner erstellen und Datei löschen Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben