2017-04-20 5 views
0

Firebaseストレージからファイルをダウンロードしようとしています。しかし、私がそれをダウンロードすると、それは.bin拡張子を持ついくつかのファイルを与えています。しかし、私は元のファイル名を取得したい。オリジナルの拡張子を持つファイルをFirebaseストレージからダウンロードする方法は?

ここに私のコードです。

try { 
      URL url = new URL(f_url[0]); 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 
      int lenghtOfFile = conection.getContentLength(); 
      InputStream input = new BufferedInputStream(url.openStream(), 
        8192); 
      OutputStream output = new FileOutputStream(Environment 
        .getExternalStorageDirectory().toString() 
        +"/Download/"+ URLUtil.guessFileName(f_url[0], null, null)); 
      Log.i("File name",URLUtil.guessFileName(f_url[0], null, null)); 
      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 

     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 

そこにf_urlはfirebaseのダウンロードURLです。ありがとうございました。

+1

Firebase SDKを使用していないのはなぜですか?ドキュメントはhttps://firebase.google.com/docs/storage/android/download-files – wnieves19

+0

です。まず、ファイルlocalFile = File.createTempFile( "ayefile"、 ""、getExternalFilesDir(null))を作成しました。そのファイルをfirebaseのローカルダウンロード機能に追加しました。しかし、私はまだ拡張子を取得していません。 : – Doge

答えて

0

これを行うための方法で構築されたが、実際には非常に簡単です:

StorageReference reference = storage.getReferenceFromUrl("https://firebasestorage.googleapis.com/..."); 

// Assuming that the file is "name.extension" in Storage 
String name = reference.getName().split(".")[0] 
String extension = reference.getName().split(".")[1] 

File localFile = File.createTempFile(name, extension); 

reference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
    @Override 
    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
     // Local temp file has been created 
    } 
}); 

しかし、あなたはそれを簡単に行うにはしたくない場合は...

はのは、どのように簡単に見てみましょうURLUtil.guessFileName()ドキュメントによるとURLUtil.guessFileName(f_url[0], null, null)

:あなたはあなたのファイルを命名している「URLとcontentDispositionを使用して、ダウンロードが持っているでしょう標準的なファイル名を推測定義されていない場合は、ファイル拡張子、MIMEタイプに基づいて追加されます。」

私はあなたのf_url[0]は、拡張子のないファイルであることを仮定している、とあなたはguessFileNameに引数として何contentDispositionmimetypeを提供しないので、それはおそらくあなたが望むものを、ファイル拡張子知ることができる方法はありません。

あなたはStorage MetadataからcontentDispositioncontentTypemimetypeと同じ)を得ることができ、あなたは拡張子を持つストレージでファイルに名前を付けるならば、あなたは行くために良いことがあります。

+0

説明のために、ファイルが拡張子でアップロードされていない場合はどうすればいいですか?ローカルtempFileが作成される前に拡張子をmime型で取得する方法はありますか? –

+0

@AndrewLamメタデータを取得し、ルックアップテーブルを維持するか(または、潜在的には、組み込みのMIMEタイプを拡張マッピングに使用する)、ファイルをダウンロードして適切な拡張子を作成します。 –

関連する問題