2017-06-11 20 views
0

私はGoogleの雲のストレージを試しています。ここに私のコードは次のとおりです。androidのGoogle Cloud Storageからファイルをダウンロードして保存するにはどうすればよいですか?

File file = new File("mydir" + "/" + fileName); 
Storage.Objects.Get get = storage.objects().get("bucketname", fileName); 
FileOutputStream stream = new FileOutputStream(file); 

get.executeAndDownloadTo(stream); 
stream.flush(); 
stream.close(); 

ダウンロードが(にエラーを取得またはをつぶすわけではない)働いている私は、ブレークポイントを設定し、fileオブジェクトを調べていることを確認しました。私はtruefile.length()を返して847を返すfile.exists()をチェックしました。

私は私の電話に行き、私がそれを見つけることができないファイルにアクセスしようとすると、また、私がダウンロードしたファイルは、常にビットマップを作成しようとすると画像ファイルになります。これは常にnullになります。

BitmapFactory.decodeFile(file.getAbsolutePath()) 
+0

私は、ルートファイルエクスプローラとそれを使用してファイルを見ることができます'get.executeAndDownloadTo(stream);'はファイルを完全にダウンロードしていないようです。実際のファイルサイズは7KBですが、わずか847になります。 – dsharew

答えて

2

解決策が見つかりました。この問題はこのコードで問題になります。

get.executeAndDownloadTo(stream) 

私が知らない理由でファイルが完全にダウンロードされていません。

ソリューション:私はシンプルなutilのメソッドを書いたコピーをバイト単位で出力ストリームのバイトへの入力ストリーム:

public static void copyStream(InputStream is, OutputStream os) throws Exception { 
    final int buffer_size = 4096; 

    byte[] bytes = new byte[buffer_size]; 

    for (int count=0;count!=-1;) { 
     count = is.read(bytes); 
     if(count != -1) { 
      os.write(bytes, 0, count);    
     } 
    } 

    os.flush(); 
    is.close(); 
    os.close(); 

} 

コール:

Utils.copyStream(get.executeMediaAsInputStream(), stream); 
+0

解決策を提供してくれてありがとう!それはひどいと思われる。私は新しいGoogleのクラウドのJavaライブラリでもっと幸運を祈るかもしれないと思う:http://googlecloudplatform.github.io/google-cloud-java –

+0

ありがとうございますが、ページの下部に「Androidは現在サポートされていません。 :) – dsharew

関連する問題