File upload mit jsp (frage zum speicherort)

Status
Nicht offen für weitere Antworten.
E

.exe

Gast
Hi,

also ich habe versucht ein eine jsp.datei zu erstellen welche in der lage ist daten an meinem server hochzuladen.
Naja ich habe mal meine dicken java / jsp wälzer ausgepackt und gesucht. Bin auch fündig geworden. Es läuft aber die datei wird immer im Startup folder des Servers (in meinem fall ein Tomcat) gespeichert. Ich weiss aber nicht wie ich das ändern kann.

Also meine Frage: Wie kann ich den speicherpfad ändern?



index.jsp

Code:
<form action="upload.jsp" method="POST" enctype="multipart/form-data">

<input type="file" name="theFile">


<input type="submit">
</form>


upload.jsp
Code:
<%@ page import="java.io.*" %>

<%
String contentType = request.getContentType();
System.out.println("Content type is :: " +contentType);
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);
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));

//out.print(dataBytes);

int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());

//out.println(boundary);

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;

FileOutputStream fileOut = new FileOutputStream(saveFile);


//fileOut.write(dataBytes);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();

System.out.println(in);
System.out.println(boundaryLocation);

out.println("File saved as " +saveFile);

}
%>

mfg

.exe
 
M

maki

Gast
Steht dieser Pfusch (Skriplets) so in deinem Buch?

Wenn ja, schmeiss es weg :)

Ansonsten wundere ich mich warum du kein Servlet und nicht die commons fileupload verwendest.
Suche mal nach MVC bzw. "Model 2".
 
E

.exe

Gast
Ja der "pfusch" steht in meinem Bucht (ok es ist net das neuste).

Danke für den Tip mit Model 2 xD habe da schon was nettes gefunden.
 
M

maki

Gast
Konkret ist diese Zeile das "Problem":

FileOutputStream fileOut = new FileOutputStream(saveFile);

Ersetze saveFile durch den Pfad + Dateinamen.

Und wirf dieses Buch weg *g*
 
E

.exe

Gast
ja aber wenn dann mach ich das jetzt richtig und net diesen "pfusch" ;-)
 
M

maki

Gast
Ein Servlet sollte die Datei speichern, nicht eine JSP.

JSPs sind rein für Darstellung verantwortlich, nicht für logik.

Mit der JSTL zB (eine Taglib) vermeidest du Scriptlets vollständig in JSPs.

Warum du selbst die Uploadfunktion implementierst ist auch so eine Sache, die commons fileupload lösen dieses Problem schon.
 
E

.exe

Gast
Habs hin bekommen xD

Code:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

/** * Servlet implementation class for Servlet: UploadServlet *  */
public class UploadServlet extends javax.servlet.http.HttpServlet implements     
javax.servlet.Servlet 
{  
	private static final String UPLOAD_PAGE = "UPLOAD_PAGE";   
	 
	/*     * (non-Java-doc)     *      * @see javax.servlet.http.HttpServlet#HttpServlet()     */  
	public UploadServlet() 
	{    
		super();  
		}   
	/*     * (non-Java-doc)     *      * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,     *      HttpServletResponse response)     */ 
	protected void doPost(HttpServletRequest request,   
			HttpServletResponse response) throws ServletException, IOException 
			{       
		FileItemFactory fileItemFactory = new DiskFileItemFactory();   
		ServletFileUpload servletFileUpload = new ServletFileUpload(  
				fileItemFactory);    
		try 
		{    
			List items = servletFileUpload.parseRequest(request);  
			for (Iterator iterator = items.iterator(); iterator.hasNext();)
			{      
				FileItem fileItem = (FileItem) iterator.next();   
				try 
				{       
					String fileName = FilenameUtils.getName(fileItem.getName());  
					String uniqueFileName = generateFileUploadEntryInDatabase(fileName); 
					StringBuilder stringBuilder = new StringBuilder();  
					stringBuilder.append("Uploading: ");  
					System.out.println(stringBuilder); 
					stringBuilder.append(fileName);
					System.out.println(stringBuilder); 
                  stringBuilder.append(" to "); 
                  System.out.println(stringBuilder); 
            ; 
                  stringBuilder.append(new File("C:",uniqueFileName).getAbsolutePath());      
                  
                  System.out.println(stringBuilder); 
                  
                  fileItem.write(new File("C:", uniqueFileName));
                
                  } 
				catch (Exception e) 
				{             
					e.printStackTrace();  
					}      
				}   
			} 
		catch (FileUploadException e) 
		{  
			e.printStackTrace();  
			}       
		//request.getRequestDispatcher(getInitParameter(UPLOAD_PAGE)).forward(request, response);  
		}  
	private String generateFileUploadEntryInDatabase(String fileName)
	{      
		String uniqueName = fileName;  
		System.out.println("save in db... " + fileName + " -> " + uniqueName);   
		return uniqueName;  
		}
	}

es läuft
 
M

maki

Gast
:)

Nebenbei, solltest den Pfad für die Dateien nicht hardocdieren sondern in der web.xml als Parameter übergeben.
 
G

Gast

Gast
Tja ich hab mal das selbe wie .exe probiert und sowas als JSP gemacht und mus feststellen das noch n weiteres Poblem hinzukommt.
bei größeren Dateien (so ab 10MB) haut er mir ne Fehlermeldung von wegen:
java.lang.OutOfMemoryError: Java heap space

entgegen.
Is da irgendne beschrönkung der Dateigröße fest implementiert?

mfg Morros
 
E

.exe

Gast
Hi,
also bei mir geht das ohne probleme auch mit daten weit über 10MB (lasse zz daten im bereich 50 bis 80MB hochladen) und bis jetzt gab es da noch nie einen fehler.

aber schau mal hier ---> http://www.javazoom.net da gibt es ne nette hilfe für große daaten (bis zu 1TB ^^).

mfg

.exe
 
G

Gast

Gast
Ich bins nochmal :D
also das was .exe mir gegeben hat hat gefunzt.
is ne super sache werd das dann mal noch auf meinen FTP als Ziel umbauen.
thx a lot

mfg Morros
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Servlet File Upload funktioniert nur lokal auf Entwicklungsrechner, nicht in Tomcat Web Tier 5
L File Upload - Dateiformat einschränken Web Tier 4
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
hdi File Upload erst nach Prüfung Web Tier 4
E Jsp file upload Web Tier 3
H File Output Servlet Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
M JSP File Browser Web Tier 9
N File empfangen Web Tier 3
M File aus Projektverzeichnis laden Web Tier 16
R Download JSP-File/Script Web Tier 3
N is out of sync with file system Web Tier 2
reibi Konfiguration ausserhalb vom WAR-File Web Tier 7
W Java code aus JSP-File durch JSTL code ersetzen Web Tier 8
R File Einlesen mit jsp/servlets Web Tier 11
D welcome-file in web.xml Web Tier 3
O eine .do-File als welcome-file im web.xml Web Tier 4
X Properties-File und relative Pfadangaben Web Tier 5
S JSP File Download (SVNKit) Web Tier 11
P jax-rs detect aborting upload Web Tier 2
Y JSF Pdf Upload Web Tier 2
S Picture Upload Web Tier 3
K Bilder nach dem Upload nutzen Web Tier 10
E Ftp-Upload von Images Web Tier 2
E Upload per Drag and Drop im IE Web Tier 7
pkm Frage zum URL-Pattern des Bereitstellungsdeskriptors Web Tier 11
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
C Wahrscheinlich einfache Frage bzgl. JSF Web Tier 2
F JSF Frage zu valueChangeListener Web Tier 1
F JSF synchronized(session) Frage ? Web Tier 1
F JSF h:selectManyCheckbox Css Frage Web Tier 2
F JSF p:selectCheckboxMenu Frage Web Tier 0
S JSF Allgemeine Frage zu JSF Web Tier 10
U Servlet Allgemeine Frage zu Servlets Web Tier 2
K Frage zu Taglibs in JSF Web Tier 3
C Kleinere Frage EJB/JSF Web Tier 7
M Design-Frage: JSP, Servlets und CSS Web Tier 11
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
F Frage zu Java Beans Web Tier 17
F Frage zum Validator Web Tier 2
J Frage zu Checkbox bei JSF Web Tier 3
S Frage bezüglich Einblendung eines Zusatzfeldes Web Tier 2
O Escapen oder nicht Escapen, das ist hier die Frage :) (Struts2) Web Tier 2
H Frage zu Servlet getRequestDispatcher Web Tier 2
S JSF: Frage wegen managed-bean Web Tier 3
G Struts 2 - Validation Frage Web Tier 5
G Kurze Frage zu editier-Formularen Web Tier 7
T Action mapping Frage (Struts) Web Tier 2
G Kurze Frage zu Servlets&Struts Web Tier 4
O kurze Frage zur Tomcat Installation Web Tier 2
O Struts Grundlagen Frage Web Tier 32
E einfache Frage zu Servlet (Counter erzeugen) Web Tier 7
W getServletConfig().getInitParameter(.) Frage Web Tier 5
G Frage zu Tiles Web Tier 4
M Grundlegende Frage zu Servlets und JSPs Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben