jakarta httpclient... progressbar

functionizer

Grünschnabel
Hi Java-Coders,

hab mit dem HttpClient-package von Jakarta/Apache einen einfachen Dateiupload von einem Applet zu einem php-Script gebastelt.

Nun möchte ich im Applet aber den Versandstatus der Datei über einen Fortschrittsbalken anzeigen lassen.

Ich finde aber keinen Weg, Zugriff auf den OutputStream von HttpClient zu bekommen.
Es gibt ja die executeMethod-Methode, aber da wird ja der POST in einem Rutsch abgefertigt, ohne die Möglichkeit einer Uploadkontrolle.

Hat da jemand nen Vorschlag, wie ich in OutputStream kontrollieren kann, um dadurch eine JProgressBar zu füttern?

MfG functionizer
 
@Thomas: Schon mal Danke für den Vorschlag.

Problem ist aber, dass das Projekt komplett in php gecodet ist und ich nur wegen der Uploadfunktion keine Servletengine auf den Server installieren will.
Außerdem hatte ich vor, dass die Benutzer die Bilder die sie hochladen wollen gleich auch schon drehen und zuschneiden können (über Java2D).

Also wäre die Sache mit dem Applet am schönsten. Bei Benutzern die keine JRE haben erscheint dann einfach ein normaler Http-Upload mit eingeschränkten Funktionen.

Also wie kann ich den Uploadstatus z.B. über DataOutputStream messen?

Ich hab es eigentlich schon fast hinbekommen. Ich baue über "HttpConnection eine Verbindung zum Server auf und lasse mir per "getRequestOutputStream()" den OutputStream geben über den ich dann den Request schreiben kann.

Nun ist aber das Problem, dass ich keinen vernünftigen Http-POST-Header bekommen, weil die PostMethod-Klasse im Jakarta Http-Client keine öffentliche Methode zum schreiben in einen Stream hat. Da gibts nur protected Methoden zum direkten schreiben in eine HttpConnection, aber da kann ich den OutputStream nicht kontrollieren.

Seltsamer Weise hat die Klasse "MultipartRequestEntity" aber eine Methode "void writeRequest(OutputStream out)" mit der man die Entities in den OutputStream schreiben kann, aber dann fehlt ja noch der korrekte POST-Header. In den Beispielen bei Jakarta werden die RequestEntities immer an PostMethod übergeben, aber da ist dann wieder das Problem mit dem OutputStream...

Hat jemand eine Idee Kann doch nicht so schwer sein.

Hier mal mein bisheriger Code:
Code:
/* ..... */

String urlString = "http://localhost/httpclienttest/fileupload.php";
HttpHost host;
HostConfiguration hostConfiguration;
HttpConnection httpConnection;
OutputStream os;
DataOutputStream dos;

httpConnection = new HttpConnection("localhost", 80);
httpConnection.setHttpConnectionManager( new SimpleHttpConnectionManager() );
httpConnection.open();
            
System.out.println("host: "+ httpConnection.getHost() );
            
os = httpConnection.getRequestOutputStream();
dos = new DataOutputStream(os); 

PostMethod postMethod = new PostMethod(urlString);
Part[] parts = {
    new FilePart(file.getName(), file),
    new StringPart("keytest", "23459789")
};
MultipartRequestEntity mre = new MultipartRequestEntity( parts, postMethod.getParams() );
            
mre.writeRequest(dos); //writes to the OutputStream

httpConnection.flushRequestOutputStream();
dos.flush();
dos.close();
httpConnection.close();

/* ..... */
 
Hab das Problem jetzt selber lösen können.

Und zwar durch die Neuimplementierung der FilePart-Klasse mit der Unterstützung der Aktualisierung einer JProgressBar-Instanz durch die sendData()-Methode.

Code:
class FilePartProgress extends PartBase { ... }
 
Zurück