1. Der direkteste und einfachste Weg besteht darin, die Dateiadresse direkt in einen Link auf der HTML-Seite einzufügen. Dies hat den Nachteil, dass der Pfad der Datei auf dem Server offengelegt wird und andere Kontrollen (z. B. Berechtigungen) für Dateidownloads nicht durchgeführt werden können. Ich werde hier kein Beispiel schreiben.
2. Auf der Serverseite wird die Datei in einen Ausgabestream umgewandelt, in die Antwort geschrieben und die Datei wird mit der Antwort zum Browser gebracht. Der Browser fragt den Benutzer, ob er bereit ist, die Datei lokal zu speichern. (Beispiel unten)
<%
Response.setContentType(fileminitype);
Response.setHeader("Location",filename);
Response.setHeader("Cache-Control", "max-age=" + cacheTime);
Response.setHeader("Content-Disposition", "attachment; filename=" + filename); //filename sollte codiert werden (utf-8)
Response.setContentLength(filelength);
OutputStream OutputStream = Response.getOutputStream();
InputStream inputStream = new FileInputStream(filepath);
byte[] buffer = neues byte[1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
OutputStream.write(buffer, 0, i);
}
OutputStream.flush();
OutputStream.close();
inputStream.close();
OutputStream = null;
%>
3. Da es sich um JSP handelt, besteht eine andere Möglichkeit darin, Applet zum Herunterladen von Dateien zu verwenden. Allerdings muss der Kunde zunächst Ihrem Applet-Applet vertrauen, das den vom Servlet gesendeten Datenstrom akzeptiert und lokal schreibt.
Beispiel für eine Servlet-Seite
öffentlicher Void-Dienst (HttpServletRequest req, HttpServletResponse res)
wirft ServletException, IOException {
res.setContentType(" text/plain ");
OutputStream OutputStream = null;
versuchen {
OutputStream = res.getOutputStream();
popFile(srcFile, OutputStream));//Schreiben Sie die Datei mit dem Dateipfad srcFile in den OutputStream.
} Catch (IOException e) {
e.printStackTrace();
}
}
JApplet-Nebenbeispiel
URLConnection con;
versuchen {
con = url.openConnection();//url ist die URL des aufgerufenen SERVLETs, z. B. http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-Type",
„application/octet-stream“);
InputStream in = con.getInputStream();
ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream(
Bereich „Dateiinhalt vom Server herunterladen“, in);
ProgressMonitor pMonitor = pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
String localfilepath = localstr + filename;//localfilepath lokaler Pfad, localstr-Dateiordner, Dateiname lokaler Dateiname
if(saveFilsaveFilee(localfilepath,pmInputStream)){ //Die Methode saveFilsaveFilee schreibt den Eingabestream pmInputStream in die Datei localfilepath.
openLocalFile(localfilepath);
}
4. Übrigens ist auch der Code für JApplet zum Hochladen von Dateien veröffentlicht.
JApplet-Seitenbeispiel
URLConnection con;
versuchen {
con = url.openConnection();//url ist die URL des aufgerufenen SERVLETs, z. B. http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-Type",
„application/octet-stream“);
OutputStream out = con.getOutputStream();
String localfilepath = localstr + filename; //localfilepath lokaler Pfad, localstr-Dateiordner, Dateiname lokaler Dateiname
getOutputStream(localfilepath,out);//Die Datei getOutputStream schreibt die Datei localfilepath in den Ausgabestream.
InputStream in = con.getInputStream();
return true;
}catch (IOException e) {
System.out.println("Datei-Upload-Fehler!");
e.printStackTrace();
}
Servlet-seitiges Codebeispiel
öffentlicher Void-Dienst (HttpServletRequest req, HttpServletResponse res)
wirft ServletException, IOException {
res.setContentType(" text/plain ");
InputStream inputStream = null;
versuchen {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);//Speichern Sie den Eingabestream inputStream in der Datei mit dem Dateipfad srcFile
} Catch (IOException e) {
e.printStackTrace();
}
} // Dienstzusammenfassung beenden
: Bei der Dateiübertragung liegt es in Form eines Streams und auf der Festplatte in Form einer Datei vor. Alles, was wir tun müssen, ist, den Stream zu senden und den Stream über HttpServletRequest und HttpServletResponse oder Antwort und Anfrage zu lesen. Sowie Vorgänge, die Dateien in Streams oder Streams in Dateien konvertieren.