Hi,
zufällig hatte ich vor kurzem das gl. problem:
realisiert mit der bibbliothek von der apache group "fileupload" (da gibts glaub ich auch ein beispiel..)
das servlet:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
public class Upload extends HttpServlet {
private Connection con = null;
private File homeDir; //upload dir
private DBCon dbCon = null;
public Upload() {
super();
}
//Datasource holen / DB init
private void initDB(){
try {
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource)jndiCntx.lookup("java:/MySqlDS");
con = ds.getConnection();
} catch (SQLException e1) {
e1.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
initDB();
homeDir = new File(System.getProperty("catalina.base")
+ System.getProperty("file.separator") + "uplaodDir"); //Upload Verzeichniss
if (!homeDir.exists())
homeDir.mkdir();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
boolean isMultipart = FileUpload.isMultipartContent(request);
System.out.println("multipart:" + isMultipart);
DiskFileUpload upload = new DiskFileUpload();
PrintWriter pw = response.getWriter();
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
String comment = null, filedest = null;
FileItem fileItem = null;
FileItem item = null;
while (iter.hasNext()) { //init Params
item = (FileItem) iter.next();
System.out.println("isFormField: " + item.isFormField());
if (item.isFormField()) {
System.out.println("getFieldName-param:"
+ item.getFieldName());
System.out.println("getString-value:" + item.getString());
comment = item.getString();
}
//fileitem holen, wenn der übergebene Parameter aus dem JSP kein FormField ist
if (!item.isFormField()) {
filedest = homeDir + System.getProperty("file.separator") + new File(item.getName()).getName();
fileItem = item;
}
}
if (!new File(filedest).exists()){ //existiert das file schon im Verzeichnis? nö, dann upload
InputStream fi;
BufferedInputStream is = new BufferedInputStream(fi = fileItem.getInputStream());
BufferedOutputStream os = new BufferedOutputStream( new FileOutputStream(filedest));
byte[] buff = new byte[8192];
int len;
while (0 < (len = is.read(buff))) {
os.write(buff, 0, len);
}
is.close();
os.flush();
os.close();
if (con.isClosed()) initDB();
PreparedStatement pstmt = con
.prepareStatement("INSERT INTO bla (id, filename, comment, ) values (?,?,?)"); //db inhalt schreiben
pstmt.setNull(1, 1);
pstmt.setString(2, new File(filedest).getName());
pstmt.setString(3, comment);
pstmt.setInt(4, 1);
pstmt.executeUpdate();
pstmt.close();
con.close();
//ausgabe alles schick
pw.println("<HTML>");
pw.println("<link rel=stylesheet type=\"text/css\" href=\"style.css\">");
pw.println("<BODY bgcolor=\"#FFFFFF\">");
pw.println("Upload erfolgreich.");
pw.println("<A HREF=\"index.jsp\">zurück</A>");
pw.println("</BODY>");
pw.println("</HTML>");
}else{
pw.println("<HTML>");
pw.println("<link rel=stylesheet type=\"text/css\" href=\"style.css\">");
pw.println("<BODY bgcolor=\"#FFFFFF\">");
pw.println("Report existiert bereits.");
pw.println("<A HREF=\"index.jsp\">zurück</A>");
pw.println("</BODY>");
pw.println("</HTML>");
}
} catch (FileUploadException e) {
//Fehlerbehandlung und DB Connection schließen
.
.
.
}}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res);
}
dann noch das jsp, ganz simpel:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<link rel=stylesheet type="text/css" href="style.css">
<html>
<head>
<title>JSP Page</title>
</head>
<body>
<table border = 0 cellspacing=4 cellpadding=4>
<tr>
<td colspan=2>Der Upload ist nur ...</td>
</tr>
<FORM class='mbutton' ENCTYPE='multipart/form-data' method='POST' action='Add'>
<tr>
<td>file:</td><td> <INPUT TYPE='file' NAME='uploadFile'></td>
</tr>
<tr>
<td>Beschreibung: </td>
<td><INPUT TYPE='text' SIZE='50' NAME='comment'></td>
</tr>
<tr>
<td>
<INPUT class='mbutton' TYPE='submit' VALUE='upload'>
</td>
</tr>
</table>
</FORM>
</body>
</html>
hoffe das hilft, bei fragen fragen. wichtig ist im jsb die angabe im form: ENCTYPE='multipart/form-data' für das file.
gruß bonkers