2015-12-04 82 views
0

我一直在Android OS正在與Azure,我設法我的視頻文件(.MP4)上傳到我已經爲它準備的容器。Android操作系統 - 如何跟蹤Azure的上傳進度

  • 容器的臨時密鑰
  • 名字的地方,我要發送的文件
  • 服務器URI
  • 我通過獲取Shared Access Signature (SAS)第一,它爲我提供了這樣做

然後,我開始AsyncTask使用「上傳」將文件發送到容器。

我檢查了容器和文件被上傳完美,對到底有沒有問題。

我的問題是關於上傳進度。有沒有可能跟蹤它?我想有一個上傳欄來提供更好的用戶體驗。

P.S - 我使用的是Azure Mobile SDK

這裏是我的代碼:

private void uploadFile(String filename){ 

     mFileTransferInProgress = true; 
     try { 
      Log.d("Funky Stuff", "Blob Azure Config"); 
      final String gFilename = filename; 

      File file = new File(filename); // File path 

      String blobUri = blobServerURL + sharedAccessSignature.replaceAll("\"", ""); 

      StorageUri storage = new StorageUri(URI.create(blobUri)); 

      CloudBlobClient blobCLient = new CloudBlobClient(storage); 

      //Container name here 
      CloudBlobContainer container = blobCLient.getContainerReference(blobContainer); 

      blob = container.getBlockBlobReference(file.getName()); 

      //fileToByteConverter is a method to convert files to a byte[] 
      byte[] buffer = fileToByteConverter(file); 

      ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer); 

      if (blob != null) { 
       new UploadFileToAzure().execute(inputStream); 
      } 

     } catch (StorageException e) { 
      Log.d("Funky Stuff", "StorageException: " + e.toString()); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Log.d("Funky Stuff", "IOException: " + e.toString()); 
      e.printStackTrace(); 
     } catch (Exception e) { 
      Log.d("Funky Stuff", "Exception: " + e.toString()); 
      e.printStackTrace(); 
     } 

     mFileTransferInProgress = false; 
     //TODO: Missing ProgressChanged method from AWS 

    } 



private class UploadFileToAzure extends 
AsyncTask <ByteArrayInputStream, Void, Void> 

{ 


     @Override 
     protected Void doInBackground(ByteArrayInputStream... params) { 
      try { 
       Log.d("Funky Stuff", "Entered UploadFileToAzure Async" + uploadEvent.mFilename); 

       //Method to upload, takes an InputStream and a size 
       blob.upload(params[0], params[0].available()); 
       params[0].close(); 

      } catch (StorageException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

謝謝!

回答

1

你可以拆分你的文件並使用Block發送它的一部分,在this link中有一個很好的例子,但它使用了C#,所以你應該在android庫引用中找到相應的函數。

,而不是向您發送文件作爲一個大文件基本上,你把它拆分到多個文件(字節),並將其發送到Azure這樣你就可以跟蹤已發送到Azure

+0

沒錯多少字節的進展,那說得通!我會試一試!謝謝:d – GuilhermeM

+0

不要忘記接受這個作爲答案,如果它的工作原理,因此也將幫助那些有同樣的問題 – Ansel

+0

在這個任何更新的人嗎? –