2017-04-13 4 views
-1

私はアンドロイドからAzure BLOBストレージに画像をアップロードしようとします。私はこのようandriodから蒼白の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」この、アンドロイドで私がしてFileNotFoundExceptionを持っています。アンドロイドから画像をアップロードするにはどうしたらいいですか?

+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

最終文字列filePathに= "C:\ Users \ユーザーicon.jpg"

これはあなたのデバイス上の既存のファイルを指して私はかなり疑問。

EDIT

しかし、私は コンテンツへのファイルパス変更した場合://メディア/外部/画像/メディア/ 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; while((b = s.read())!= -1) os.write(b); blob.upload(s、os.size()); –

関連する問題