6

我有应用程序从我设备上的专用路径中选择文件并将其发送到服务器。

我正在使用 ksoap2 lib 调用 .NET webservice 将我的文件发送到服务器。我正在使用 Base 64 编码。

我可以发送最大大小为 1MB 的文件(不加密)和 850Kb 的加密文件。我使用的加密算法是 3DES。

如果我尝试发送大于上述大小的文件,我会收到以下错误:原因:org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:121) 处的 java.lang.OutOfMemoryError

我的测试环境:具有 API 级别 8、Android 2.2 和 SDCard 内存 512 MB 的 Android 模拟器

是我错过了什么吗?在这种情况下使用 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);

调用服务器端 Web 服务并将数据发送到服务器

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

无法发送超过 1 MB 的文件数据。

提前致谢

4

4 回答 4

1

我不知道您要达到什么目的,但是为什么不将文件分成几部分并将每个部分单独发送到一个循环中,或者android background service使用一个每 x 秒发送一个部分的计时器。

于 2013-04-04T14:22:04.803 回答
0

如果压缩没有帮助 - 如上一篇文章所述 - 您可能必须自己对消息进行分段。

分割

于 2013-04-09T13:14:02.013 回答
0

使用GZip Zipping算法从移动端压缩大文件;从服务器使用相同的解压缩。

另外使用 MultipartEntity 可以帮助上传大文件内容。

于 2013-04-08T13:17:43.047 回答
0

尝试在发送之前将缓冲区设置为 1024,这与缓冲区大小和内存的限制有关

于 2013-04-06T02:59:46.217 回答