Servlet File Upload funktioniert nur lokal auf Entwicklungsrechner, nicht in Tomcat

andyx1975

Aktives Mitglied
Hallo,

ich habe ein Upload Servlet geschrieben. Das funktioniert bei mir local in der Entwicklungsumgebung auch hervoragend. Die Datei wird im entsprechenden Uploadverzeichnis abgelegt. Wenn ich die Application jedoch auf einem Server ausführe, bekomme ich die folgende Fehlermeldung:

Java:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	com.uds.webadmin.server.CServletFile.doPost(CServletFile.java:85)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	com.uds.webadmin.server.CServletFile.doPost(CServletFile.java:85)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16

Der Fehler tritt in der folgenden Zeile auf:
Java:
List<FileItem> items = upload.parseRequest( req );

Java:
package com.uds.webadmin.server;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


public class CServletFile
    extends HttpServlet
{

    private static final long serialVersionUID = 1L;


    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp )
        throws ServletException, IOException
    {

        String UPLOAD_DIRECTORY = getServletContext().getRealPath( "/" ) + "uploads";


        if ( ServletFileUpload.isMultipartContent( req ) )
        {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload( factory );

            try
            {
                List<FileItem> items = upload.parseRequest( req );
                for ( FileItem item : items )
                {
                    if ( item.isFormField() )
                        continue;

                    String fileName = req.getParameter( "file" );

                    File uploadedFile = new File( UPLOAD_DIRECTORY, fileName );
                    if ( uploadedFile.createNewFile() )
                    {
                        item.write( uploadedFile );
                        resp.setStatus( HttpServletResponse.SC_CREATED );
                        resp.getWriter().print( "The file was created successfully." );
                        resp.flushBuffer();
                    }
                    else
                        throw new IOException( "The file already exists in repository." );
                }
            }
            catch ( Exception e )
            {
                resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "An error occurred while creating the file : " + e.getMessage() );
            }

        }
        else
        {
            resp.sendError( HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE,
                            "Request contents type is not supported by the servlet." );
        }
    }

}
 
Zuletzt bearbeitet:
ok super... ich habe die commons-io-2.1 runtergeladen und im Verzeichnis "Tomcat\common\lib" abgelegt. Tomcat neu gestartet und schon funktionierte es 🙂 Danke!!!
 

Zurück
Oben