Avec l'introduction des fonctions Cloud de Firebase, nous cherchons à déplacer certains de nos codes de serveur node.js vers les fonctions de cloud. Un problème que j'ai est de télécharger un fichier à partir d'un seau GCS dans un fichier temporaire sur le disque, puis de l'envoyer par e-mail en pièce jointe (en utilisant mailgun-js).Firebase cloud function API Erreur avec Google Cloud Storage
Le morceau de code me faisant le deuil est:
return mkdirp(tempLocalDir).then(() => {
const bucket = gcs.bucket(gcsBucket);
const tempFilePath = tempLocalDir + gcsFile;
return bucket.file(gcsFile).download({
destination: tempFilePath
}).then(() => {
console.log('File downloaded locally to', tempFilePath);
var messageSubject = "Test";
var messageBody = "Test with attach";
var mailgunData = {
from: ,
to: agentEmail,
subject: messageSubject,
html: messageBody,
attachment: tempFilePath,
};
mailgunAgent.messages().send(mailgunData, function (error, body) {
console.log(body);
});
});
});
Le message d'erreur que je reçois dans les journaux des fonctions est:
ApiError: Forbidden
at Object.parseHttpRespMessage (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:156:33)
at Object.handleResp (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:131:18)
at Duplexify.<anonymous> (/user_code/node_modules/@google-cloud/storage/src/file.js:724:21)
at emitOne (events.js:96:13)
at Duplexify.emit (events.js:188:7)
at emitOne (events.js:96:13)
at DestroyableTransform.emit (events.js:188:7)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at Request.<anonymous> (/user_code/node_modules/@google-cloud/storage/node_modules/request/request.js:1108:14)
Je suis été en mesure de télécharger le fichier le dossier/tmp/sur le disque en utilisant request, et ce sera l'option fallback, mais j'aimerais vraiment utiliser les outils GCS si possible. Je "pense" que c'est une erreur d'authentification avec GCS, mais je ne suis pas sûr de savoir comment le faire. Dois-je avoir des paramètres d'authentification différents dans les fonctions de cloud .config() pour GCS que pour Firebase? Si oui, comment les entrer? Notre compartiment et notre projet GCS sont antérieurs à l'introduction de Firebase Storage, mais nous l'avons utilisé avec succès avec les fonctions de noeud exécutées sur notre serveur.
Merci à l'avance, Zach
merci pour la réponse. Malheureusement, j'ai essayé, et ça ne marche pas. Je pense que je peux avoir un problème d'autorisation, mais j'ai du mal à le suivre. – Zach