Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ksop2如何向web服务发送大文件_Java_Android_Ksoap2_Android Ksoap2 - Fatal编程技术网

Java 使用ksop2如何向web服务发送大文件

Java 使用ksop2如何向web服务发送大文件,java,android,ksoap2,android-ksoap2,Java,Android,Ksoap2,Android Ksoap2,我有一个应用程序,它从我的设备上的一个专用路径中拾取文件并将其发送到服务器 我正在使用ksoap2库调用.NETWebService将文件发送到服务器。我使用的是base64编码 我可以不加密发送最大为1MB的文件,加密发送最大为850Kb的文件。我使用的加密算法是3DES 如果我尝试发送大于上述大小的文件,则会出现以下错误:导致:org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:121)上的java.lang.OutO

我有一个应用程序,它从我的设备上的一个专用路径中拾取文件并将其发送到服务器

我正在使用ksoap2库调用.NETWebService将文件发送到服务器。我使用的是base64编码

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

如果我尝试发送大于上述大小的文件,则会出现以下错误:导致:org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:121)上的java.lang.OutOfMemoryError

我的测试环境:具有API级别8、Android 2.2和SD卡内存512 MB的Android emulator

是不是我遗漏了什么?在这种情况下,使用BLOB可以帮助我吗

有没有办法发送更大的文件?我听说过发送数据块,但对此一无所知。任何链接或示例代码都会非常有用

要使用以下代码获取文件数据: 此处url=存储文件的位置

public byte[]getFileData(字符串vURL){
instream=新文件输入流(vURL);
size=(int)vURL.length();
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的文件数据


提前感谢

我不知道您想要实现什么,但为什么不将文件分成几个部分,然后使用每x秒发送一个部分的计时器将每个部分单独发送到循环或android后台服务中。

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

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


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

如果压缩没有帮助(如前一篇文章所述),您可能需要自己对邮件进行分段


请发布您的代码。这个问题的任何答案都只是猜测,除非我们能看到一些代码。请指定您试图发送到这里的文件的大小,因为如果这些文件大于4MB,那么问题不在android部分,而是在web服务部分,您需要通过设置以下属性来配置web.Config文件。