2017-04-26 6 views
3

ファイルをFirebaseにアップロードしたら、そのファイルをURLにして後で使用できるように保存できますか?他のユーザが画像にアクセスできるようにFirebaseデータベースへのURLを書きたいと思います。ファイルをFirebaseにアップロードした後にファイルを取得する方法は?

私はそうのようなファイルアップロードしています:

public void uploadFile() 
{ 

    StorageReference filepath = mstorageRef.child("folder").child(filename); 

    Uri File= Uri.fromFile(new File(mFileName)); 

    filepath.putFile(File).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 
     { 
      Toast.makeText(MtActivity.this, "Upload Done", Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

を私は今、私はちょうど私が私のデータベースに書き込むことができURLを必要とするファイルが実際にアップロードしていることを確認しました。私はこれを行うにしようとしたときしかし:

Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); 

それは私にエラーを与え、私はそれが何を意味するのかわからないんだけど、私はそのエラー感覚を得ることがなぜ私も知りませんThis method should only be accessed from tests or within private scope

を語りますFirebaseが提供するthis exampleに従っています。

URLを取得する新しい方法はありますか?

また、特にこのアイテムに固有のURLですか?それをデータベースに保存して後でアクセスしようとすると、私はそうすることができますか?

+0

を).getDownloadUrl() ' –

+0

@AnggrayudiH私はそれを試みました、そして、それは私に同じエラーメッセージを与えます。何らかの理由で、私の 'addOnSuccessListener()'メソッドの中でメソッドを呼び出せません。 –

+0

あなたが見ているエラーに関しては、[this post](http://stackoverflow.com/q/41105586/4625829)を見たことがありますか? –

答えて

0

taskSnapshot.getDownloadUrl()を試しましたか? それも動作しない場合は、このお試しくださいmstorageRef.child("folder").child(filename).toString()

+0

'taskSnapshot.getDownloadUrl()'を試しましたが、同じエラーが発生します。また、あなたが私に示した他の方法をどうやって使用しますか?また、私のために他の方法は何をしますか?ファイルをどのように元に戻すのですか? –

+0

URLはイメージが格納されているファイヤーベースのパスに過ぎません。アップロードの成功時には、パスがストレージ上に作成されていることを知っている必要がありますので、保存したものと同じストレージ参照を使用して、 toString() ' – amar

+0

それは理にかなっています。しかし、私が別の活動に参加していて、そのイメージにアクセスしたいのであれば、どうすればいいでしょうか?私は 'mstorageRef'にアクセスできないので、どうすれば画像にアクセスできますか? –

0

によって成功リスナーに画像の位置を取得することができます:あなたが代わりに `taskSnapshot.getMetadata(の、` taskSnapshot.getDownloadUrlを() `書くべき

final Uri uri = data.getData(); 

StorageReference filepath = mStorageRef.child("folder").child(filename); 
filepath.putFile(uri).addOnSuccessListener(new 

OnSuccessListener<UploadTask.TaskSnapshot>() { 

     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

      Uri downloadUri = taskSnapshot.getDownloadUrl(); 
      //Getting url where image is stored 
      //downloadUri will store image URI 
     } 
    }); 
関連する問題