Upload für dummys

Von: , Frage gestellt am Mo, 5. Sep 2005

Hi Experten,

ich muß auf die schnelle einen File-Upload in eine Oracle DB realisieren. Leider bin ich nicht so fit in Java.

Fragen:

1) Wie muss die HTML-Seite mit dem File-Select aufgebaut sein?
2) Wie übergibt man das selectierte File an ein Servlet?

Das einfügen in die DB aus einem InputStrem bekomme ich selber hin...

Ich habe gegoogelt, aber nix so richiges gefunden.
Gibts irgendwo ein HOW-TO? Theoretischer Background...

HIIILLFFEEE!!!!
Nic

3 Antworten zu dieser Frage

  1. Antwort von nach 58 Minuten 0 hilfreich
    Re: Upload für dummys

    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

    • Antwort von nach einer Stunde 0 hilfreich
      Uff...

      ...InputStream - das sieht gut aus, da kann ich meinen EXIF-Killer dazwischen hängen.

      Na ja - erst mal durchwühlen.....

      Danke!
      Nic

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!