我有应用程序从我的设备上的专用路径中选择文件并将其发送到服务器。
我使用ksoap2 lib调用.NET webservice将我的文件发送到服务器。我正在使用Base 64编码。
我可以发送最大大小为1MB而不加密的文件和850Kb加密文件。我正在使用的加密算法是3DES。
如果我尝试发送大于上面大小的文件,我会收到以下错误:引起:org.ksoap2.transport.HttpTransportSE.call上的java.lang.OutOfMemoryError(HttpTransportSE.java:121)
我的测试环境:Android模拟器,API级别为8,Android 2.2和SDCard内存为512 MB
我错过了什么吗?在这种情况下可以使用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的filedata。
提前致谢
答案 0 :(得分:1)
我不知道你想要实现什么,但为什么你不将你的文件分成几部分并将每个部分分别发送到一个循环中或者使用一个每个发送一个部分的定时器发送到android background service
x秒。
答案 1 :(得分:0)
尝试在发送之前将缓冲区设置为1024,大约是缓冲区大小和ram的限制
答案 2 :(得分:0)
使用GZip Zipping算法从移动端压缩大文件;使用从服务器解压缩。
另外,使用MultipartEntity可以帮助上传大文件内容。
答案 3 :(得分:0)
如果压缩没有帮助 - 如前一篇文章中所述 - 您可能需要自己对邮件进行分段。