2017-04-13 42 views
-1

我嘗試將圖像從android上傳到Azure Blob存儲。我可以通過這種方式來自andriod的Azure blob存儲

CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); 

     // Create the blob client. 
     CloudBlobClient blobClient = storageAccount.createCloudBlobClient(); 

     CloudBlobContainer container = blobClient.getContainerReference("mycontainer"); 

     final String filePath = "C:\\Users\\icon.jpg"; 

     CloudBlockBlob blob = container.getBlockBlobReference("1.jpg"); 
     File source = new File(filePath); 
     blob.upload(new FileInputStream(source), source.length()); 

從Java做,但如果我改變文件路徑爲「內容://媒體/外部/圖像/媒體/ 12」這一點,在android系統我有FileNotFoundException異常。我怎樣才能從android上傳圖片?

+0

是否有你在你的代碼中指定的路徑下的文件? –

回答

0
  CloudBlockBlob blob = container.getBlockBlobReference(UserInfo.username + ".jpg"); 
      BlobOutputStream blobOutputStream = blob.openOutputStream(); 
      ContentResolver cr = context.getContentResolver(); 
      InputStream s = cr.openInputStream(uri); 
      byte[] arr = convertInputStreamToByteArray(s); 
      ByteArrayInputStream inputStream = new ByteArrayInputStream(arr); 
      int next = inputStream.read(); 
      while (next != -1) { 
       blobOutputStream.write(next); 
       next = inputStream.read(); 
      } 
      blobOutputStream.close(); 

轉換的流就是這樣

public byte[] convertInputStreamToByteArray(InputStream inputStream) 
    { 
     byte[] bytes= null; 

     try 
     { 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

      byte data[] = new byte[1024]; 
      int count; 

      while ((count = inputStream.read(data)) != -1) 
      { 
       bos.write(data, 0, count); 
      } 

      bos.flush(); 
      bos.close(); 
      inputStream.close(); 

      bytes = bos.toByteArray(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     return bytes; 
    } 
+0

謝謝,它正在工作)) –

1

最後字符串的文件路徑= 「C:\用戶\ icon.jpg」

我非常懷疑這點到現有文件的設備上。

編輯

但是,如果我的文件路徑更改爲 內容://媒體/外部/圖像/媒體/ 12

這不是文件路徑。使用content:// Uri,需要使用ContentResolver和openInputStream()openOutputStream()等方法。

+0

對不起,我已編輯我的問題 –

+0

查看編輯答案 –

+0

我應該這樣做嗎? CloudBlockBlob blob = container.getBlockBlobReference(UserInfo.username +「.jpg」); ContentResolver cr = context.getContentResolver(); InputStream s = cr.openInputStream(uri); ByteArrayOutputStream os = new ByteArrayOutputStream(); int b; ((b = s.read())!= -1) os.write(b); blob.upload(s,os.size()); –