当前位置:编程学习 > wap >>

android通过http向服务器发送大文件流传输问题

这是我的代码
  URL url = null;
HttpURLConnection conn = null;
String filename=android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"myfifle12m.zip";
try {
File file=new File(filename);
long n= file.length();
int ii=(int)n;
RandomAccessFile raFile=new RandomAccessFile(file, "rw");
url = new URL("http://10.0.2.2:8080/Medicine/Downloadfile.do");      
    conn = (HttpURLConnection)url.openConnection();  
    conn.setRequestMethod("POST");   
    conn.setChunkedStreamingMode(1024);
    conn.setUseCaches(false);                                 
    conn.setDoOutput(true); 
    conn.setDoInput(true);
    conn.setRequestProperty("Content-Type", "application/zip");
    DataOutputStream os = new DataOutputStream(conn.getOutputStream());
    byte[] buffer=new byte[1024];
    for(int sum=0;sum<n;)
    {
     int nRead=raFile.read(buffer,0,1024);
     if(nRead> 0)
     {
     os.write(buffer);
     os.flush();
     sum=sum+nRead;
     Log.i("write:", String.valueOf(nRead)+"sum="+String.valueOf(sum));
     }
    
    }
   
    
    os.close();
} catch (Exception e) {
Log.e("httperror",e.toString());
}

上传的文件大小有12m,我的问题是即使我有setChunkedStreamingMode(1024),但还是没有立即向服务器传输文件,还是存在内存中,当存到4m的样子就是java.net.socketexception:broken pipe.然后查了很久找到一些原因:http://ferreousbox.iteye.com/blog/157728,好像问题是我的HttpURLConnection是java.net.HttpURLConnection,而不是sun.net.www.protocol.http.HttpURLConnection,好吧,我改成sun.net.www.protocol.http.HttpURLConnection的,提示没有这个包,好的,我增加一个library: JRE System library[jre7],好了没有错误了,可是运行却提示:12-16 14:38:41.144: E/AndroidRuntime(757): java.lang.NoClassDefFoundError: sun.net.www.protocol.http.HttpURLConnection
我晕,在rt.jar里都能找到这个类,运行时却又出问题,求大神帮助!
--------------------编程问答-------------------- 个人认为要看你服务器是怎么处理的。
你发送文件内容的时候 都是先把文件内容存在缓冲区里面就是内存。然后再一并发送。

你可以考虑用socket,这个效率比较高,可以试试把流发送到服务器端。
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,