Frage

Ich versuche Bild von meinem midlet zu einem HTTP-Server zu senden. Bilder werden in Byte umgewandelt und an Server mit http multipart / form-data Anforderungsformat.

ByteArrayOutputStream bos = new ByteArrayOutputStream();
bos.write(boundaryMessage.getBytes());
bos.write(fileBytes);
bos.write(endBoundary.getBytes());

Wenn die Bildgröße kleiner ist als etwa 500Kb dann der Code funktioniert gut, aber wenn die Größe größer ist, als es zeigt: abgefangene Ausnahme java.lang.OutOfMemoryError. Ich habe versucht, Java ME SDK 3.0 und Nokia S40 5th Edition FP1 verwenden. Jede Hilfe wird sehr geschätzt. Dank für das Schauen

Ich habe die folgende Klassendatei: hier klicken

War es hilfreich?

Lösung

Gezwungen, die gesamte Datei in dem Speicher mit dem ersten `getFileBytes () zu übertragen, um in einem Stück zu lesen, ist am wahrscheinlichsten, was das System aus dem Speicher ausgeführt wird.

Finden Sie einen Weg über 100K zu lesen, übertragen sie, dann weitere 100 lesen, bis die gesamte Datei durchgeführt wird.

Die Konstrukteurs-HttpMultipartRequest Klasse geschrieben erlaubt nur für die Übertragung der Datei als ein einzelnes Objekt. Auch wenn es eine Implementierung der MIME-Multipart-Content-Protokoll ist, wird er auf den Fall beschränkt, der Übertragung nur einen Teil:

kann die Klasse geändert werden, um mehrere Teile zu ermöglichen, zu senden. Werfen Sie einen Blick auf die Protokollspezifikation RFC1341 , vor allem das Beispiel auf halbem Weg durch.

Mit diesen drei Linien zusammen, wie sie im Konstruktor ist, die gesamte Datei in einem Teil gesendet wird;

bos.write(boundaryMessage.getBytes());
bos.write(fileBytes);
bos.write(endBoundary.getBytes());

Aber im mehrteiliger Fall braucht es mehr Grenzen sein, vor dem endBoundary:

 for(bytes=getMoreFileBytes(); ! bytes.empty; bytes=getMoreFileBytes()){
        bos.write(boundaryMessage.getBytes());
        bos.write(bytes);
    }
    bos.write(endBoundary.getBytes());

Als schnelle Lösung, lassen Sie den Konstruktor die Datei öffnen und es 100k zu einem Zeitpunkt zu lesen. Er erhält bereits einen fileName Parameter.

Der PHP-Skript auf der anderen Seite sollte die Originaldatei aus den Stücken wieder zusammenzusetzen.

Andere Tipps

Ich bin nicht sehr vertraut mit den Forenregeln, versuchte ich Ihre Antwort zu kommentieren, aber es zeigt, negativ aus.

Ok .. Jetzt java.io.IOException Ich erhalte: Persistent Verbindung fallen gelassen, nachdem erste Block gesendet werden, können nicht Wiederholungs

vorher habe ich versucht, application / x-www-form-urlencoded Anforderungstyp zu verwenden, mit Base64 codiert, kidcandy den Code hier: http://forums.sun.com/thread.jspa?threadID=538500

Dieser Code teilt die Bilddaten in Stücken zu vermeiden ‚Persistent Verbindung drop‘ Problem und schafft Verbindung mit dem Server ‚für‘ Schleife. Das Problem ist, maximale Chunkgröße vielleicht nur 500-700 Bytes. So ein 100kb Bild zu senden Bedürfnisse des Code 200-mal zu erstellen und zu enge Verbindung habe ich versucht, diese auf Nokia 5310 Telefon zu laufen, es verhält sich wie es ist hibernating ... so ist es nicht sinnvoll ist.

  1. Nun soll ich, dass für Schleife für ‚multipart / form-data‘ Anfrage?
  2. Was ist die maximale Blockgröße für diese Art der Anfrage?
  3. oder andere Idee? Grüße
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top