Hallo allerseits,
noch 2 Fragen zu dem Java Example: How to upload file in JSP. Die JSP zum Hochladen und Speichern hat folgenden, von mir etwas erweiterten Code (zwecks Anzeige des Bildes):
Ich will einen Personen-Datensatz anlegen (d. h. schrittweise ein Formular füllen), und als erstes sollen die Benutzer ihr Bild hochladen können. Das Hochladen klappt schon mal, aber sobald die Bilddatei hochgeladen ist, will ich sie bei allen nachfolgenden Seiten, wo die weiteren Eingaben (Name, Adresse, ...) erfolgen sollen, anzeigen.
Ich gehe davon aus, dass der Web-Container (Tomcat) zuerst den ganzen Java-Code abarbeitet, also auch die Zeilen
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
bevor er dann zuletzt die HTML-Ausgabe generiert und zum Browser schickt. Die src-Angabe in
<IMG src="images\<%=saveFileName%>" />
kommt offenbar richtig im Browser an, die Bilddatei existiert auch im Zielverzeichnis, aber die Browser (FF, IE, Chrome) stellen das Bild nicht dar, zeigen nur einen leeren Bildrahmen (und darin ggf. den Alternativtext). Erst nach einem Nachladen des Bildes oder einem Neuladen der ganzen Seite bekommt man das Bild angezeigt.
1. Woran kann das liegen und was kann man da machen, damit man das Bild sofort sieht?
2. Die Pfade zum Speichern der hochgeladenen Datei und im IMG-src-Parameter sollen eigentlich nicht hart codiert bleiben, sondern durch Variablen/Fallunterscheidungen ersetzt werden. Aber scheinbar kann ich mit dem Tag <IMG src=".... nicht auf jedes beliebige Verzeichnis zugreifen, sondern nur auf Unterverzeichnisse des Projektverzeichnisses. Z. B.
Projekt unter: "C:\Web\NetBeans\NetBeansProjects\WebApplication01\"
Bild-Dateien : "C:\Web\NetBeans\NetBeansProjects\WebApplication01\images\XXXXX.jpg"
aber nicht unter: "C:\Web\apache-tomcat-7.0.52\webapps\Test-Daten\"
Auch wenn ich den Pfad absolut bzw. Pfad und Dateinamen so
<IMG src="C:\Web\apache-tomcat-7.0.52\webapps\Beispiel-Test-Daten\<%=saveFileName%>" alt="hochgeladenes Bild" />
<IMG src="C:\Web\apache-tomcat-7.0.52\webapps\Beispiel-Test-Daten\XXXXX.jpg" alt="hochgeladenes Bild" />
angebe, wird kein Bild angezeigt. In einem leeren Bildrahmen steht der alternative Text und die Bild-URL ist about:blank.
Existiert eine solche Einschränkung für den scr-Parameter? Kann man die irgendwie umgehen oder liege ich da völlig falsch?
Erläuterungen, Codebeispiele, Links zum Nachlesen wären sehr willkommen.
Yannick
noch 2 Fragen zu dem Java Example: How to upload file in JSP. Die JSP zum Hochladen und Speichern hat folgenden, von mir etwas erweiterten Code (zwecks Anzeige des Bildes):
Java:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ page import="java.io.*"%>
<%
String saveFile = "";
String saveFileName = saveFile;
String saveFilePath = saveFile;
String contentType = request.getContentType();
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);
saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1, contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
saveFileName = saveFile;
saveFilePath = "C:\\Web\\NetBeans\\NetBeansProjects\\WebApplication01\\web\\images\\";
saveFile = saveFilePath + saveFile;
File ff = new File(saveFile);
FileOutputStream fileOut = new FileOutputStream(ff);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
%><Br>
<table border="2">
<tr>
<td>
<b>You have successfully uploaded the file by the name of:</b>
<% out.println(saveFile);
}
%>
</td>
</tr>
</table>
<center>
<br />
Das ist das hochgeladene Bild "<%=saveFileName%>" aus dem Ordner "<%=saveFilePath%>":<br />
<br />
<IMG src="images\<%=saveFileName%>" width="20%" height="20%" alt="hochgeladenes Bild" />
</center>
Ich will einen Personen-Datensatz anlegen (d. h. schrittweise ein Formular füllen), und als erstes sollen die Benutzer ihr Bild hochladen können. Das Hochladen klappt schon mal, aber sobald die Bilddatei hochgeladen ist, will ich sie bei allen nachfolgenden Seiten, wo die weiteren Eingaben (Name, Adresse, ...) erfolgen sollen, anzeigen.
Ich gehe davon aus, dass der Web-Container (Tomcat) zuerst den ganzen Java-Code abarbeitet, also auch die Zeilen
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
bevor er dann zuletzt die HTML-Ausgabe generiert und zum Browser schickt. Die src-Angabe in
<IMG src="images\<%=saveFileName%>" />
kommt offenbar richtig im Browser an, die Bilddatei existiert auch im Zielverzeichnis, aber die Browser (FF, IE, Chrome) stellen das Bild nicht dar, zeigen nur einen leeren Bildrahmen (und darin ggf. den Alternativtext). Erst nach einem Nachladen des Bildes oder einem Neuladen der ganzen Seite bekommt man das Bild angezeigt.
1. Woran kann das liegen und was kann man da machen, damit man das Bild sofort sieht?
2. Die Pfade zum Speichern der hochgeladenen Datei und im IMG-src-Parameter sollen eigentlich nicht hart codiert bleiben, sondern durch Variablen/Fallunterscheidungen ersetzt werden. Aber scheinbar kann ich mit dem Tag <IMG src=".... nicht auf jedes beliebige Verzeichnis zugreifen, sondern nur auf Unterverzeichnisse des Projektverzeichnisses. Z. B.
Projekt unter: "C:\Web\NetBeans\NetBeansProjects\WebApplication01\"
Bild-Dateien : "C:\Web\NetBeans\NetBeansProjects\WebApplication01\images\XXXXX.jpg"
aber nicht unter: "C:\Web\apache-tomcat-7.0.52\webapps\Test-Daten\"
Auch wenn ich den Pfad absolut bzw. Pfad und Dateinamen so
<IMG src="C:\Web\apache-tomcat-7.0.52\webapps\Beispiel-Test-Daten\<%=saveFileName%>" alt="hochgeladenes Bild" />
<IMG src="C:\Web\apache-tomcat-7.0.52\webapps\Beispiel-Test-Daten\XXXXX.jpg" alt="hochgeladenes Bild" />
angebe, wird kein Bild angezeigt. In einem leeren Bildrahmen steht der alternative Text und die Bild-URL ist about:blank.
Existiert eine solche Einschränkung für den scr-Parameter? Kann man die irgendwie umgehen oder liege ich da völlig falsch?
Erläuterungen, Codebeispiele, Links zum Nachlesen wären sehr willkommen.
Yannick
Zuletzt bearbeitet: