31

Firebase ストレージ バケット内のファイルへの「長期永続ダウンロード リンク」を取得しようとしています。これの権限を次のように変更しました

service firebase.storage {
  match /b/project-xxx.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

そして、私のJavaコードは次のようになります:

private String niceLink (String date){
    String link;
    // Points to the root reference
    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("/" + date+ ".csv");
    link = dateRef.getDownloadUrl().toString();
    return link;
}

これを実行すると、 com.google.android.gms.tasks.zzh@xxxのような uri リンクを取得します

質問 1.次のようなダウンロード リンクを取得できますか: https://firebasestorage.googleapis.com/v0/b/project-xxxx.appspot.com/o/20-5-2016.csv?alt=media&token= b5d45a7f-3ab7-4f9b-b661-3a2187adxxxx

上記のリンクを取得しようとしたときに、戻る前に最後の行を次のように変更しました。

private String niceLink (String date){
    String link;
    // Points to the root reference
    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("/" + date+ ".csv");
    link = dateRef.getDownloadUrl().getResult().toString();
    return link;
}

しかし、これを行うと、403 エラーが発生し、アプリがクラッシュします。コンソールは、これは bc ユーザーが /auth にログインしていないことを示しています。「トークンを要求する前にサインインしてください」

質問 2.これを修正するにはどうすればよいですか?

4

14 に答える 14

34

ダウンロード URL の取得については、ドキュメントを参照してください。

を呼び出すgetDownloadUrl()場合、呼び出しは非同期であり、成功のコールバックをサブスクライブして結果を取得する必要があります。

// Calls the server to securely obtain an unguessable download Url
private void getUrlAsync (String date){
    // Points to the root reference
    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("/" + date+ ".csv");
    dateRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
    {
        @Override
        public void onSuccess(Uri downloadUrl) 
        {                
           //do something with downloadurl
        } 
    });
}

これは、公開された推測不可能なダウンロード URL を返します。ファイルをアップロードしたばかりの場合、このパブリック URL はアップロードの成功コールバックに含まれます (アップロード後に別の非同期メソッドを呼び出す必要はありません)。

ただし、String参照の表現だけが必要な場合は、単に呼び出すことができます.toString()

// Returns a Uri of the form gs://bucket/path that can be used
// in future calls to getReferenceFromUrl to perform additional
// actions
private String niceRefLink (String date){
    // Points to the root reference
    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("/" + date+ ".csv");
    return dateRef.toString();
}
于 2016-05-22T20:21:24.820 に答える
0
StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();

final   StorageReference fileupload=mStorageRef.child("Photos").child(fileUri.getLastPathSegment());
UploadTask uploadTask = fileupload.putFile(fileUri);

Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()) {
            throw task.getException();
        }
        return ref.getDownloadUrl();

    }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();
                Picasso.get().load(downloadUri.toString()).into(image);

            } else {
                 // Handle failures
            }
       }
});
于 2018-09-14T14:30:58.500 に答える
0

これを見る https://www.youtube.com/watch?v=SsF8i4WiZpU

それは私のために働いた!!!

コード: https://github.com/augustina55/firebaseupload

于 2021-03-05T17:00:03.997 に答える
0

getDownloadUrl メソッドは、新しい firebase アップデートで廃止されました。代わりに、次の方法を使用してください。 taskSnapshot.getMetadata().getReference().getDownloadUrl().toString()

于 2019-08-08T19:04:33.147 に答える