2013-03-01 6 views
6

Ich habe eine Anwendung, die die Datei aus einem dedizierten Pfad auf meinem Gerät auswählt und es an den Server sendet.Mit ksop2, wie große Dateien an Web-Service senden

Ich benutze ksoap2 lib, um den .NET Webservice aufzurufen, um meine Datei an den Server zu senden. Ich verwende Base 64-Codierung.

Ich kann Datei mit einer maximalen Größe von 1 MB ohne Verschlüsselung und 850 KB mit Verschlüsselung senden. Der Verschlüsselungsalgorithmus, den ich verwende, ist 3DES.

Wenn ich versuche, Dateien, die größer als die oben Größe zu schicken ich folgende Fehlermeldung erhalten: Verursacht durch: java.lang.OutOfMemoryError bei org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:121)

My Test Umgebung: Android Emulator mit API Level 8, Android 2.2 und SDCard Speicher 512 MB

Ist es, dass ich etwas verpasse? Kann BLOB in diesem Szenario helfen

Gibt es eine Möglichkeit, größere Datei zu senden? Ich habe gehört, Datenblöcke zu senden, habe aber keine Ahnung davon. Jeder Link oder Beispielcode wird wirklich helfen. hier url = wo Datei gespeichert ist

public byte[] getFileData(String vURL){ instream = new FileInputStream(vURL); size = (int) vURL.length();
fileContent = new byte[size]; instream.read(fileContent); }

Encode die Daten mit folgendem Code:

byte[] res = Utilities.getFileData(file); 
String mdata = android.util.Base64.encodeToString(res,        android.util.Base64.DEFAULT); 

Aufruf serverseitige Web-Service und das Senden

auf Dateidaten mit folgendem Code zu erhalten Daten zum Server

SoapObject request = new SoapObject(nameSpace, methodName); 

if (fileData != null && !fileData.equals("")) { 
     request.addProperty("vBLOBData", fileData); 
} 
    SoapSerializationEnvelope envelope = getEnvelope(request); 
    HttpTransportSE ht = new HttpTransportSE(url); // ,3000 
    ht.debug = true; 
    ht.call(soapAction, envelope); 
    response = (envelope.getResponse()).toString(); 

Nicht in der Lage, Daten von mehr als 1 MB zu senden.

Vielen Dank im Voraus

+0

Bitte geben Sie Ihren Code ein. Jede Antwort auf diese Frage ist nur Spekulation, es sei denn, wir können tatsächlich Code sehen. –

+1

Bitte geben Sie an, um wie viel größer die Dateien, die Sie hier senden möchten, da, wenn diese Datei größer als 4 MB ist, das Problem nicht in Ihrem Android-Teil alles in Ihrem Web-Service-Teil ist und Sie Ihre Web.Config-Datei konfigurieren müssen durch Einstellen der folgenden Attribute: . –

Antwort

1

Ich weiß nicht, was Sie erreichen wollen, aber warum Sie teilen sich nicht Ihre Datei in mehrere Teile und jedes Teil einzeln in eine Schleife oder in eine android background service mit Hilfe eines Timers senden, sendet alle x Sekunden ein Teil.

0

Versuchen Sie, Puffer auf 1024 zu setzen, bevor sie zu senden, sein über die Grenze Ihrer Puffergröße und Ihr RAM

0

Verwenden GZIP Zipping Algorithmus große Datei von mobiler Seite zip; Verwenden Sie das gleiche Entpacken vom Server.

Verwenden Sie auch MultipartEntity kann helfen, große Dateiinhalte hochzuladen.

0

Wenn die Komprimierung nicht hilft - wie im vorherigen Post erwähnt - müssen Sie wahrscheinlich die Nachricht selbst segmentieren.

Segmentation