# HTTP-Upload



## walther (29. Jan 2008)

Hallo Euch,

kann mir jemand bei folgendem Problem helfen. Ich habe einen JBoss 4.2.2. im Einsatz und möchte mit Hilfe der commons-fileupload-1.2 Dateien an ein Servlet versenden. Ich habe das Problem, dass grundsätzlich alle Dateien, die upgeloaded werden, bei 4096 abgeschnitten werden. Ich weiß, dass dieses Thema hier schon mehrfach diskutiert wurde, allerdings habe ich aus meiner Sicht alle Lösungsvorschläge getestet - leider ohne erfolgreiches Ergebnis. 

Bei der Verwendung einer DiskFileItemFactory ist das Verhalten das gleiche. Auch wenn ich per upload.setFileSizeMax bzw. setSizeMax eine Begrenzung ausschließe. 

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload();

        UploadObject uploadObject = new UploadObject();

        try {
            // Parse the request
            FileItemIterator iter = upload.getItemIterator(request);

            // looping over attached streams

            while (iter.hasNext()) {

                FileItemStream item = iter.next();

                if (!item.isFormField()) {
                    InputStream stream = item.openStream();
                    byte[] data = new byte[stream.available()];
                    stream.read(data);
                    stream.close();
                    }
                }

das byte[] data hat immer eine maximale Größe von 4096 Byte. 
In der Konfiguration sind folgende Connectoren definiert - beide das gleiche Verhalten.

    <Connector port="8085" address="${jboss.bind.address}"    
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />

    <Connector port="6444" address="localhost"    
         maxThreads="250" maxHttpHeaderSize="100000000"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />


Danke für Eure Hilfe.


----------



## Niki (29. Jan 2008)

Ich weiß jetzt nicht ob dir das was nützt, aber bei mir funktioniert dieses Servlet (ebenfalls commons-fileupload):


```
protected void service(HttpServletRequest request, HttpServletResponse arg1)
			throws ServletException, IOException {
		File dir = getDir(request);
		RequestContext reqCon = new ServletRequestContext(request); 
		boolean isMultipart = ServletFileUpload.isMultipartContent(reqCon);

		if (isMultipart) {
			try {
				FileItemFactory factory = new DiskFileItemFactory();

				ServletFileUpload upload = new ServletFileUpload(factory);

				List<FileItem> items = upload.parseRequest(request);

				for (FileItem fi : items) {
					if (!fi.isFormField()) {
						byte[] b = fi.get();
						File newFile = Util.getUniqueFile(dir, fi.getName());
						store(newFile, b);
					}
				}
			} catch (Exception ex) {
				Settings.LOGGER.error("file couldn't get saved", ex);
				throw new ServletException(ex);
			}
		}
	}

	private void store(File f, byte[] b) throws IOException {
		FileOutputStream fos = null;

		try {
			fos = new FileOutputStream(f);
			fos.write(b);
		} finally {
			if (fos != null) {
				fos.flush();
				fos.close();
			}
		}

		Settings.LOGGER.info(f.getCanonicalPath() + " saved");
	}
```


----------



## lhein (29. Jan 2008)

Hallo walther,

ich hab mal sowas gemacht und ein Tutorial dazu geschrieben.
Schau dir mal die fertige Klasse unter:
Tutorial
an.

Kannst Du wahrscheinlich nicht 1:1 übernehmen, da hier Komponenten von ServiceMix mit eingehen, aber es ist kein großer Akt, das auf JAF Objekte umzubiegen.

Grüße
lr


----------

