Android图片上传,如何获取上传进度

2014-12-6 10:48:36     人阅读    

Android图片上传,如何获取上传进度?

android上传图片文件,动态展示进度的问题.

项目中目前需要使用上传图片,监听图片上传进度的需求,这个需求有点难倒我了,因为是使用 HttpURLConnection建立连接,长传的时候是没有办法知道上传的具体进度的,下面是上传的代码.

主要代码

       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
      //允许Input、Output,不使用Cache 
      con.setDoInput(true);
      con.setDoOutput(true);
      con.setUseCaches(false);
      //设置传送的method=POST 
      con.setRequestMethod("POST");
      // setRequestProperty 
      con.setRequestProperty("Connection", "Keep-Alive");
      con.setRequestProperty("Charset", "UTF-8");
      con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
      //设置DataOutputStream 
      File f = new File(DIR_PATH, photo_name);
      DataOutputStream ds = new DataOutputStream(con.getOutputStream());
      FileInputStream fStream = new FileInputStream(f);
      long total = fStream.available();
      String totalstr = String.valueOf(total);
      Log.v(LOG_TAG, "文件大小:"+totalstr);
      // 设置每次写入1024bytes 
      int bufferSize = 1024;
      byte[] buffer = new byte[bufferSize];
      int length = -1;
      long progressBarLength = 0;
      //从文件读取数据至缓冲区 
      while ((length = fStream.read(buffer)) != -1) {
       //将资料写入DataOutputStream中 
       ds.write(buffer, 0, length);
         //获取进度
       progressBarLength += length;
       publishProgress((int) ((progressBarLength / (float) total) * 100));
      }
      ds.writeBytes(end);
      ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
      //close streams 
      fStream.close();
      ds.flush();


今天想到一个比较可行的方式...
笨方法,单个图片的话算个总大小,在服务器那边用线程反馈接收了多少

先计算图片的大小,服务器端在接受数据的时候,每接收到一块数据,就给前段或者向指定内存里面写入当前进度,上传的时候另外启动一个线程专门监听进度...

 


原文地址:http://www.itmmd.com/201412/264.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(13)android幀布局   上一篇
下一篇  android app打包部署到手机上报waiting for debugger
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!