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