2013-03-01 3 views
6

У меня есть приложение, которое выбирает файл по выделенному пути на моем устройстве и отправляет его на сервер.Использование ksop2 для отправки больших файлов в веб-службу

Я использую ksoap2 lib для вызова .NET webservice для отправки моего файла на сервер. Я использую кодировку Base 64.

Я могу отправить файл с максимальным размером 1 МБ без шифрования и 850 Кбит с шифрованием. Алгоритм шифрования, который я использую, - это 3DES.

Если я пытаюсь послать файлы большего размера, чем выше размер я получаю следующее сообщение об ошибке: Вызванный: java.lang.OutOfMemoryError на org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:121)

My Test среда: Android-эмулятор с уровнем API 8, Android 2.2 и SDCard 512 МБ

Является ли это тем, что я что-то упускаю? Может ли использование BLOB помочь мне в этом случае

Можно ли отправить более крупный файл? я слышал о том, чтобы отправлять куски данных, но понятия не имею. любая ссылка или образец кода действительно помогут.

для получения данных из файла, используя следующий код: здесь URL = где хранится файл

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

закодировать данные, используя следующий код:

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

призывающей сторону сервер веб-службу и отправки данные на сервер

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(); 

Не удалось отправить filedata более 1 МБ.

Заранее спасибо

+0

Пожалуйста, внесите ваш код. Любой ответ на этот вопрос - это просто спекуляция, если мы не можем увидеть какой-то код. –

+1

Укажите, насколько больше файлов, которые вы пытаетесь отправить здесь, так как если этот файл больше 4 мб, проблема в том, что ваша часть андроида не является частью вашего веб-сервиса, и вам нужно настроить файл web.Config установив следующие атрибуты . –

ответ

1

Я не знаю, что вы пытаетесь достичь, но почему вы не разделить файл на части и отправить каждую часть по отдельности в петлю или в android background service с помощью таймера, который отправляет часть каждые x секунд.

0

Попробуйте установить буфер 1024 перед его отправкой его о пределе вашего размера буфера и вашего барана

0

Использование GZip проносясь алгоритм застегнуть большой файл с мобильной стороны; использование такой же распаковщик с сервера.

Также использование MultipartEntity может помочь загрузить большое содержимое файла.

0

Если сжатие не помогает - как упоминалось в предыдущем сообщении, вам, вероятно, придется сегментировать сообщение самостоятельно.

Segmentation

Смежные вопросы