1

Ich habe ein anderes Projekt, in dem der gleiche Code erfolgreich funktioniert, so dass es einige Konfigurationsoption sein kann, die ich diesmal verpasst habe. Ich verwende die Google Cloud-API, um auf den Firebase-Speicher zuzugreifen.Google Cloud 404 nach der Überprüfung der Datei existiert

Zur besseren Übersichtlichkeit existiert die Datei .

var storage = require('@google-cloud/storage')({ 
 
\t \t keyFilename: 'serviceAccountKey.json', 
 
\t \t projectId: 'my-id' 
 
\t }); 
 
var bucket = storage.bucket('my-id.appspot.com'); 
 

 
var file = bucket.file('directory/file.json'); //this exists! 
 
file.exists(function(err, exists){ 
 
    console.log("Checking for challenges file. Results:" + exists + ", err:" + err); //returns "Checking for challenges file. Results:true, err:nil" 
 
     if (exists) { 
 
    \t console.log("File exists. Printing."); //prints "File exists. Printing." 
 
    \t file.download().then(function(currentFileData) { 
 
    \t \t console.log("This line is never reached."); 
 
    \t }).catch(err => { 
 
    \t \t console.error('ERROR:', err); //gives a 404 error 
 
    \t }); 
 
     } 
 
});

Statt Druck „diese Linie nie erreicht wird.“, Druckt es die folgenden gefangen Fehler: ERROR: { ApiError: Not Found at Object.parseHttpRespMessage (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:156:33) at Object.handleResp ... ... Der vollständige Fehler ist kolossal, also werde ich es nicht hier posten in seinem Gesamtheit, sofern nicht erforderlich.

+0

Buckets sind an Projekte gebunden. Sind Sie sicher, dass Sie in beiden Projekten dieselbe Datei im selben Verzeichnis haben? – MondKin

+0

Ja, ich bin mir sicher. Ich habe X Anzahl der Dateien (max 8), und ich führe diesen Code mit einer sich ändernden Dateivariable erneut aus. Wenn ich 3 Dateien habe, läuft es 3 Mal (weil Exists 3 mal richtig gefunden wurden), aber dann Fehler 3 Mal (weil ich 3 404 Fehler erzeuge, einen für jede existierende Datei). –

+0

Bei der Überprüfung der Dokumentation für Google Cloud sieht nichts schlecht aus mit Ihrem Code, daher kann ich nur daran denken, dass es sich um ein Problem mit Berechtigungen im Bucket handelt. Vielleicht können Sie Dateien auflisten, haben aber keinen Zugriff auf den Dateiinhalt? – MondKin

Antwort

0

Es ist möglich, dass der Benutzer, der auf die Datei zugreifen möchte, nur über den Bucket Zugriff hat, aber nicht über die Datei. Überprüfen Sie die ACLs von sowohl den Eimer und die Datei in beiden Projekten und vergleichen, was man bekommt:

myBucket.acl.get() 
    .then(acls => console.log("Bucket ACLs:", acls)); 
myFile.acl.get() 
    .then(acls => console.log("File ACLs:", acls)); 

Sie sollten eine Ausgabe wie diese:

[ [ { entity: '[email protected]', role: 'OWNER' }, 
    { entity: '[email protected]', role: 'OWNER' } ], 
    { kind: 'storage#objectAccessControls', 
    items: [ [Object], [Object] ] } ] 

Wenn es keinen Unterschied gibt, versuchen die folgende ausführlichere Versionen des gleichen Codes:

myBucket.acl.get() 
    .then(acls => console.log("Bucket ACLs:", JSON.stringify(acls, null, '\t'))); 
myFile.acl.get() 
    .then(acls => console.log("File ACLs:", JSON.stringify(acls, null, '\t'))); 
Verwandte Themen