2017-04-13 41 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()); –