我有应用程序从我设备上的专用路径中选择文件并将其发送到服务器。
我正在使用 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 的文件数据。
提前致谢