2017-05-31 2 views
5

Code:Firebase Storage/Bucket öffentlicher Upload mit node.js

var storage = require('@google-cloud/storage'); 
var gcs = storage({ 
    projectId: config.google.projectId, 
    keyFilename: config.google.keyFilenameFirebase 
}); 

var bucket = gcs.bucket('project-id.appspot.com'); 
var destination = 'uploads/12345/full.jpg'; 

bucket.upload(myFile, { public: true, destination: destination }, function(err, file) { 
    if (err) { 
     console.log(err); 
    } 
}); 

Meine Datei erfolgreich auf meinen Feuerbasis Speicher hochgeladen, aber:

  1. Die Datei nun öffentlich zugänglich über die URL: https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg. Kann ich diese feste URL in meiner App verwenden oder ist es wahrscheinlich, dass sie sich ändert oder abläuft?
  2. public: true scheint die Firebase Speicher UI zu brechen:

enter image description here Die Vorschau des Bildes auf der rechten Seite nicht angezeigt wird, und ich bin nicht in der Lage, das Bild über den Download-Button zum Download bereit. Auch gibt keine URL-Download ist (was ich habe nichts dagegen, weil ich es über den Link oben zugreifen kann), und wenn „Neue Download-URL“ klicken Firebase liefert

Fehler beim Generieren Download-URL

Beim Entfernen von public: true wird die Vorschau korrekt angezeigt und ich kann auch eine Download-URL generieren. Aber die öffentliche URL https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg wird nicht mehr funktionieren, was für mich notwendig ist.

Also mein Plan ist es, bei public: true zu bleiben, aber es stört mich immer noch, dass die Vorschau/Download-Taste nicht funktioniert und es sieht aus wie ein Fehler in Firebase zu mir. Kann das jemand bestätigen?

Antwort

4

1) Es wird nicht ablaufen, solange es immer öffentlich ist. (Ich habe einen Link zu diesem Thema am unteren Rand hinzugefügt)

2) Hier ist die schnelle Lösung. (Sie können eine der folgenden tun)

  • Fügen Sie sich selbst in der Standard-ACL (unten ist der Befehl mit gsutil)

gsutil defacl ch -u your_email @ mail.com: BESITZER gs: // your_bucket;

  • Sich selbst als Storage-Administrator in der Google Admin-Konsole IAM

Dann Dateien ....

TL reupload; DR

Hier ist der Grund, warum, gemäß der Firebase Documentation:

Mit den Google Cloud Storage-APIs können Sie auf Dateien zugreifen, die über Firebase SDKs für Cloud Storage hochgeladen wurden, insbesondere für komplexere Vorgänge wie das Kopieren oder Verschieben einer Datei oder das Auflisten aller bei einer Referenz verfügbaren Dateien .

Es ist wichtig zu beachten, dass diese Anfragen Google Cloud Storage ACLs oder Project Level IAM anstelle von Firebase Authentication und Storage Security Rules verwenden.

In Bezug auf die public:true, denke ich, dass es nur die öffentliche Verbindung aktivieren und erstellen wird. Siehe here

2

Ihre URLs dürfen sich nicht ändern oder ablaufen, und sie sollten bis auf Widerruf gültig sein, was durch eine Objektaktualisierung oder explizit durch Entzug einer URL in der Firebase-Webkonsole erfolgen kann. Zumindest nach meinem besten Wissen.

Das erste, was mir in den Sinn kommt ist, dass: Haben Sie CORS auf den Eimer konfiguriert? Dies könnte ein Grund sein. Check this out

Zweite Sache, die ich denken kann, ist Speicherregeln. Wenn Sie etwas wie allow read: if request.auth.uid == userId; haben, können Sie diese entfernen, um Dateien öffentlich zugänglich zu machen. Sie können so etwas wie diese verwenden, um alle Dateien in einem Pfad öffentlich zu machen:

service firebase.storage { 
    match /b/XXXXXX.appspot.com/o { 
    match /{allPaths=**} { 
     allow read; 
    } 
    } 

Wenn Sie bereits diese zwei Dinge getan haben, dann leider könnte es tatsächlich ein Feuerbasis Bug sein. Viel Glück!

+0

Ich bin bereits in Kontakt mit dem Firebase Tech-Team. – Chris

Verwandte Themen