2012-08-14 71 views
1

我怎样才能获得完成上传的百分比 并为我的进度条做了进度更新。如何获得完成上传的百分比

我正在添加我的上传代码。 我在异步任务中使用它。

请大家帮忙。 谢谢

ileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url   = new URL(upLoadServerUri); 
        conn    = (HttpURLConnection) url.openConnection(); // Open a HTTP connection to the URL 
        conn.setDoInput(true); // Allow Inputs 
        conn.setDoOutput(true); // Allow Outputs 
        conn.setUseCaches(false); // Don't use a Cached Copy 
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Connection", "Keep-Alive"); 
        conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
        conn.setRequestProperty("uploaded_file", fileName); 
        dos  = new DataOutputStream(conn.getOutputStream()); 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd); 
        dos.writeBytes(lineEnd); 
         Log.i("buffer", "jgf"+fileInputStream.read()); 


        bytesAvailable = fileInputStream.available(); // create a buffer of maximum size 
        bufferSize  = Math.min(bytesAvailable, maxBufferSize); 
        buffer   = new byte[bufferSize]; 

        // read file and write it into form... 
        bytesRead  = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) 
        { 
         dos.write(buffer, 0, bufferSize); 
         bytesAvailable =  fileInputStream.available(); 
         bufferSize  =  Math.min(bytesAvailable, maxBufferSize); 
         bytesRead  =  fileInputStream.read(buffer, 0, bufferSize); 
} 

dos.writeBytes(lineEnd); 
         dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200){ 
         runOnUiThread(new Runnable() { 
           public void run() { 

            Toast.makeText(getApplicationContext(), "File Upload Complete.", Toast.LENGTH_SHORT).show();        
            dialog.dismiss(); 

           } 
          });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

回答

0

你应该利用AsynchTask及其publishProgress()。如果您四处搜索,可以找到很多示例,例如this

+0

其实我正在寻找一个上传进度。并且我得到的所有代码都只是将进度移动到99%,然后等待下载完成 – Rahul 2012-08-16 07:20:20

+0

那么,您知道总大小为bytesAvailable,并且每次都会写入bufferSize字节。在每次写入之后,您可以执行'publishProgress(totalBytesWritten * 100/bytesAvailable)',其中totalBytesWritten每次增加'bufferSize'。 – ekholm 2012-08-16 10:35:47

+0

谢谢。得到它了。 – Rahul 2012-08-17 06:17:34