Einfaches Java-Applet für Dateienupload?

  • Themenstarter Themenstarter SilverVegeto
  • Beginndatum Beginndatum
S

SilverVegeto

Hallo Community,

ich bin seit längerem auf der Suche nach einem sehr einfachen Java-Applet, damit den Usern auf meiner Homepage ein Multi-Upload ermöglicht wird.

Hintergrund:
Fotogallerie, es soll möglich sein viele Bilder hochzuladen, wirklich nur Bilder hochladen den Rest werde ich dann via PHP/GDI lösen.

Kennt jemand zufällig so ein Applet leicht zum anpassen?
 
Hi SilverVegeto,

ein fertiges Applet habe ich nicht, aber eine Klasse für den Fileupload (allerdings immer nur ein File) kann ich dir anbieten:

Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;


public class Util {
	public final static String CRLF = "\r\n";
	
	static public void uploadFile(String url, String host, String mimeType, String fieldName, File file, Socket sock, boolean debug) throws IOException {
		String fileName = file.getName();
		FileInputStream is = new FileInputStream(file);
		byte[] fileBytes = new byte[(int) file.length()];
		is.read(fileBytes);
		is.close();
		
		uploadByteArray(url, host, mimeType, fieldName, fileBytes, fileName, sock, debug);
	}
	
	static public void uploadByteArray(String url, String host, String mimeType, String fieldName, byte[] fileBytes, String fileName, Socket sock, boolean debug) {

		String boundary ="---------------------------" + System.currentTimeMillis();
	
		String boundaryHeader = "Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"";
		boundaryHeader += CRLF;
		boundaryHeader += "Content-Type: " + mimeType + CRLF + CRLF;
		
		long contentLength = fileBytes.length + 
		                     (boundary + CRLF).length() +
		                     boundaryHeader.length() +
		                     (CRLF + boundary + CRLF).length() + "--".length() * 3;
		
		String header = "POST " + url + " HTTP/1.1" + CRLF;
		header += "Host: " + host + CRLF;
		header += "Content-Type: multipart/form-data; boundary=" + boundary + CRLF;
		header += "Content-Length: " + contentLength + CRLF;
		header += CRLF;
		
		
		try {
			OutputStream os = sock.getOutputStream();
			
			// Send header
			os.write(header.getBytes());
			if(debug) System.out.print(header);
			
			// Send boundary string
			os.write(("--" + boundary + CRLF).getBytes());
			if(debug) System.out.print("--" + boundary + CRLF);
			
			// Write boundary header
			os.write(boundaryHeader.getBytes());
			if(debug) System.out.print(boundaryHeader);
				
			// Send File content
			os.write(fileBytes);
			
			if(debug) System.out.print(new String(fileBytes));
			
			// Send boundary string
			os.write((CRLF + "--" + boundary + "--" + CRLF).getBytes());
			if(debug) System.out.print(CRLF + "--" + boundary + "--" + CRLF);
			
			os.flush();
					
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
	
}

Das Applet müsstest Du dann noch signieren, da auf lokale Ressourcen (Files) zugegriffen wird.

Gruß
joschi
 
Danke joschi70, aber ich hab jetzt etwas im Internet gefunden dass genau meine Wünsche erfüllt.

Link: http://postlet.com/example/

Habe nur ein Problem die Bilder werden nicht im Ordner angezeigt, obwohl diese hochgeladen werden und der Ordner die Rechte 777 hat. Auch nicht wenn ich das FTP-Programm mit F5 aktualisiere.

Es werden wohl nur meine Einstellungen falsch sein. Die Dateien index.html, javaUpload.php, postlet.jar befinden sich im Ordner "upload-test", auf dem Server.

Code der index.html-Datei:
PHP:
<applet name="postlet" code="Main.class" archive="postlet.jar" width="305" height="150" mayscript>
  <param name = "maxthreads" value = "5" />
  <param name = "language" value = "" />
  <param name = "type" value = "application/x-java-applet;version=1.3.1" />
  <param name = "destination" value ="http://www.mein_domain.de/upload-test/javaUpload.php" />
  <param name = "backgroundcolour" value = "16777215" />
  <param name = "tableheaderbackgroundcolour" value = "14079989" />
  <param name = "tableheadercolour" value = "0" />
  <param name = "warnmessage" value = "false" />
  <param name = "autoupload" value = "false" />
  <param name = "helpbutton" value = "false" />
  <param name = "fileextensions" value = "Bild Dateien,jpg,gif,jpeg" />
  <param name = "endpage" value = "http://www.mein_domain.de/upload-test/" />
  <param name = "helppage" value = "http://www.postlet.com/help/?thisIsTheDefaultAnyway" />
</applet>

Code der javaUpload.php-Datei:
PHP:
<?php
// Configuration ---------------------------------------------------------------
// Change the below path to the folder where you would like files uploading.
// e.g. "/home/yourname/myuploads/"
// or "c:\php\uploads\"
// Note, this MUST have the trailing slash.
$uploaddir = '/bilder/';
// Whether or not to allow the upload of specific files
$allow_or_deny = true;
// If the above is true, then this states whether the array of files is a list of
// extensions to ALLOW, or DENY
$allow_or_deny_method = "deny"; // "allow" or "deny"
$file_extension_list = array("php","asp","pl");
// -----------------------------------------------------------------------------
if ($allow_or_deny){
	if (($allow_or_deny_method == "allow" && !in_array(strtolower(array_pop(explode('.', $_FILES['userfile']['name']))), $file_extension_list))
		|| ($allow_or_deny_method == "deny" && in_array(strtolower(array_pop(explode('.', $_FILES['userfile']['name']))), $file_extension_list))){		
		// Atempt to upload a file with a specific extension when NOT allowed.
		// 403 error
		header("HTTP/1.1 403 Forbidden");
		echo "POSTLET REPLY\r\n";
		echo "POSTLET:NO\r\n";
		echo "POSTLET:FILE TYPE NOT ALLOWED\r\n";
		echo "POSTLET:ABORT THIS\r\n"; // Postlet should NOT send this file again.
		echo "END POSTLET REPLY\r\n";
		exit;
	}
}
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir .$_FILES['userfile']['name']))
{
	// All replies MUST start with "POSTLET REPLY", if they don't, then Postlet will
	// not read the reply and will assume the file uploaded successfully.
	echo "POSTLET REPLY\r\n";
	// "YES" tells Postlet that this file was successfully uploaded.
    echo "POSTLET:YES\r\n";
	// End the Postlet reply
	echo "END POSTLET REPLY\r\n";
	exit;
} 
else
{
	// If the file can not be uploaded (most likely due to size), then output the
	// correct error code
	// If $_FILES is EMPTY, or $_FILES['userfile']['error']==1 then TOO LARGE
	if (count($_FILES)==0 || $_FILES['userfile']['error']==1){
		// All replies MUST start with "POSTLET REPLY", if they don't, then Postlet will
		// not read the reply and will assume the file uploaded successfully.
		header("HTTP/1.1 413 Request Entity Too Large");
		echo "POSTLET REPLY\r\n";
		echo "POSTLET:NO\r\n";
		echo "POSTLET:TOO LARGE\r\n";
		echo "POSTLET:ABORT THIS\r\n"; // Postlet should NOT send this file again.
		echo "END POSTLET REPLY\r\n";
		exit;
	}
	// Unable to write the file to the server ALL WILL FAIL
	else if ($_FILES['userfile']['error']==6 || $_FILES['userfile']['error']==7){
		// All replies MUST start with "POSTLET REPLY", if they don't, then Postlet will
		// not read the reply and will assume the file uploaded successfully.
		header("HTTP/1.1 500 Internal Server Error");
		echo "POSTLET REPLY\r\n";
		echo "POSTLET:NO\r\n";
		echo "POSTLET:SERVER ERROR\r\n";
		echo "POSTLET:ABORT ALL\r\n"; // Postlet should NOT send any more files
		echo "END POSTLET REPLY\r\n";
		exit;
	}
	// Unsure of the error here (leaves 2,3,4, which means try again)
	else {
		// All replies MUST start with "POSTLET REPLY", if they don't, then Postlet will
		// not read the reply and will assume the file uploaded successfully.
		header("HTTP/1.1 500 Internal Server Error");
		echo "POSTLET REPLY\r\n";
		echo "POSTLET:NO\r\n";
		echo "POSTLET:UNKNOWN ERROR\r\n";
		echo "POSTLET:RETRY\r\n";
		print_r($_REQUEST); // Possible usefull for debugging
		echo "END POSTLET REPLY\r\n";
		exit;
	}
}
?>
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube ich hab den Fehler gerade gefunden kann ihn aber erst heute Mittag testen.
 
Also ich hab den Code jetzt nochmal abgeändert und im JAVA-Applet kommt auch die Meldung, dass der Upload erfolgreich war - habe keine Probleme mit Java - jedoch wird das Bild nicht im Pfad /upload-test/bilder/ gespeichert.
Ich glaube das liegt an der PHP-Datei javaUpload.php, vllt. auch an der Pfadangabe. Aber ich weiß leider nicht warum.
PHP:
<?php
-- gelöscht --
?>
 
Zuletzt bearbeitet von einem Moderator:
Also dieser Script funktioniert leider wirklich nicht mit JAVA 6.0 deswegen kann ich diesen nicht gebrauchen.

Leider hab ich mich jetzt tot-gegooglet :(
Und alle Scripte die ich finde sind viel zu aufwendig bzw. nur Demos.
Dabei möchte ich nur ein leicht anpassbares Applet für Dateienupload von mir aus auch mit Drag&Drop Funktion.

Kennt denn nicht zufällig jemand ein wirklich schlichtes Applet?
Es soll nur Dateien an einen bestimmten Ordner hochladen und schauen ob es Bilder sind mehr nicht.
 
Hi SilverVegeto,

muss es denn ein Applet sein?
Was sind denn die Vorteile eines Applets im Vergleich zu einem Form basierten HTML Upload?

Gruß
joschi
 
Zurück