2017-04-25 1 views
3

Ive stellte eine Frage zum Download zuvor die downloadURL von Firebase Speicher zu erhalten, ist die Antwort, die mir gegeben wurde, war:Firebase SignedURL nicht gleich url Speicher

bucket.file(filename).getSignedUrl({ 
    action: 'read', 
    expires: '03-17-2025' 
}, function(err, url) { 
    if (err) { 
    console.error(err); 
    return; 
    } 

    // The file is now available to read from this URL. 
    request(url, function(err, resp) { 
    // resp.statusCode = 200 
    }); 
}); 

Die eine von der vorherigen sein gegeben Code funktioniert nicht, wenn ich ein Bild mit Glide downloade oder eine Audiodatei mit dem ExoPlayer erzeuge.

Jedoch habe ich eine komplett andere URL als die eine, die durch die Firebase Lagerung gegeben ist, (Wich funktioniert für Glide und ExoPlayer), wenn eine Datei laden wich ist wie folgt aussieht:

https://firebasestorage.googleapis.com/v0/b/project-PROYECT_NUMBER.appspot.com/o/Messages%2Fimages%2F-KUj4wvXXl6aj9XXXX%2F1493147111111?alt=media&token=TOKEN

Wie bekomme ich die richtige downloadUrl wie die, die ich mit dem Android oder dem iOS SDK bekommen würde, auf der Serverseite?

Antwort

2

Es gibt keine Art und Weise ist die Download-URL auf Server-Seite zu erhalten wie du kannst, wenn du das Android, iOS oder Javascript SDK verwendest. Sie müssen eine URL generieren, indem Sie getSignedUrl() aufrufen.

Sie können überprüfen, ob Sie die Datei unter der angegebenen URL lesen dürfen.

Standardmäßig müssen Sie authentifiziert werden.

Überprüfen Sie die Speicherregeln in der Feuerbasis Konsole

https://firebase.google.com/docs/storage/security/#authorization

1

Ich hoffe, Sie laden das Bild über App nur na? Nach dem Upload erhalten Sie den Downloadlink zurück. Ich hoffe, dass dich das hemmen wird.

import com.google.firebase.storage.StorageTask; 

final StorageTask uploadTask = uplodedFileRef.putBytes(data); 
    Log.d(TAG, "uploadFilefromPath: " + uplodedFileRef.getPath().toString()); 
uploadTask.addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception exception) { 
        // Handle unsuccessful uploads 
        Toast.makeText(acty, "Upload Failed", Toast.LENGTH_SHORT).show(); 
        dialog.dismiss(); 
        sendResult(false, Uri.EMPTY); 
       } 
      }) 
      .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
        Toast.makeText(acty, "Upload Successful", Toast.LENGTH_SHORT).show(); 
        dialog.dismiss(); 
        sendResult(true, taskSnapshot.getDownloadUrl()); 
       } 
      }) 
      .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 

        int bytesTransferred = (int) taskSnapshot.getBytesTransferred(); 
        int totalBytes = (int) taskSnapshot.getTotalByteCount(); 
        int progress = (100 * bytesTransferred)/totalBytes; 

        Log.v(TAG, "Bytes transferred: " + taskSnapshot.getBytesTransferred()); 
        Log.v(TAG, "TotalBytes: " + totalBytes); 
        Log.v(TAG, "Upload is: " + progress + "% done"); 

        dialog.setContent("Upload in Progress"); 
        dialog.getProgressBar().setIndeterminate(false); 
        // double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 
        dialog.getProgressBar().setMax(totalBytes/1024); 
        dialog.setMaxProgress(totalBytes/1024); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
         dialog.getProgressBar().setProgress(bytesTransferred/1024, true); 
         dialog.setProgress(bytesTransferred/1024); 
        } else 
         dialog.getProgressBar().setProgress(bytesTransferred/1024); 
        dialog.setProgress(bytesTransferred/1024); 
        // dialog.getProgressBar().setProgress((int) progress); 
       } 
      }); 
+0

das Problem ist, dass ich tue, was ich will über den Server, dass die URL abzurufen – Andrea

+0

ich sehe haben Antwort hineinschauen hinzugefügt @Andrea – Techgeek

+0

I Es tut mir leid, aber die Antwort entspricht nicht dem, wonach ich frage. Ich muss diese URL im Firebase Functions-Knotencode – Andrea

1
addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { //success 
      sendResult(true, taskSnapshot.getDownloadUrl()); 
     } 
}) 

in diesem taskSnapshot.getDownloadUrl() Sie die Download-URL erhalten dann speichern Sie es in Firebase Datenbank Sie in der Lage kann als abzurufen, wenn

+0

Es tut mir leid, aber die Antwort entspricht nicht dem, wonach ich frage. Ich muss diese URL im Firebase-Funktionen-Code – Andrea

+0

abrufen. Mit der obigen Methode sollten Sie die Download-URL in einem Knoten speichern und dann auf diesen Knoten zugreifen Ihre Firebase-Funktionen. –

Verwandte Themen