2013-03-01 17 views
6

Ho un'applicazione che preleva il file da un percorso dedicato sul mio dispositivo e lo invia al server.Utilizzo di ksop2 come inviare file di grandi dimensioni al servizio Web

Sto usando ksoap2 lib per chiamare il servizio web .NET per inviare il mio file al server. sto usando la codifica Base 64.

Posso inviare file con dimensione massima di 1 MB senza crittografia e 850 KB con crittografia. L'algoritmo di Encirption che sto utilizzando è 3DES.

se cerco di inviare file più grandi di dimensioni sopra ottengo l'errore seguente: causato da: java.lang.OutOfMemoryError a org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:121)

mio test ambiente: emulatore Android con API Livello 8, memoria Android 2.2 e SDCard 512 MB

È che mi sto perdendo qualcosa? Può utilizzare BLOB aiutarmi in questo scenario

C'è un modo per inviare file di grandi dimensioni? ho sentito parlare dell'invio di blocchi di dati ma non ne ho idea. qualsiasi link o codice di esempio sarà di grande aiuto.

per ottenere i dati dei file utilizzando seguente codice: qui url = dove file è memorizzato

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

codificare i dati utilizzando codice seguente:

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

chiamando il servizio web lato server e l'invio dati al 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(); 

Non è possibile inviare file con più di 1 MB.

Grazie in anticipo

+0

Inserisci il tuo codice. Qualsiasi risposta a questa domanda è solo speculazione, a meno che non possiamo effettivamente vedere un codice. –

+1

Specificare quanto più grande è il file che si sta tentando di inviare qui, poiché se questi file sono più grandi di 4 mb il problema non si trova nella parte di Android, è tutto nella parte del servizio Web e occorre configurare il proprio file web.Config impostando i seguenti attributi . –

risposta

1

Non so che cosa si sta cercando di raggiungere, ma perché non dividere il file in parti e inviare ogni parte singolarmente in un loop o in un android background service utilizzando un timer che invia una parte ogni x secondi.

0

tenta di impostare il buffer a 1024 prima di inviarlo, la sua circa il limite della vostra dimensione del buffer e la RAM

0

Usa GZip Zipping algoritmo per comprimere file di grandi dimensioni da una parte mobile; usa la stessa decompressione dal server.

Utilizzare anche MultipartEntity può aiutare a caricare file di grandi dimensioni.

0

Se la compressione non aiuta - come menzionato nel post precedente - probabilmente dovrai segmentare il messaggio da solo.

Segmentation