# #node.js #firebase #vue.js #google-cloud-storage #nuxt.js
Вопрос:
Я создаю систему загрузки изображений. Я хочу использовать sdk администратора Firebase для обработки этого процесса. Как получить URL — адрес для хранения в моем облачном хранилище Google и отобразить его в теге img (html) после завершения загрузки.
try {
const file = req.file;
const bucket = admin.storage().bucket();
const imageBuffer = Buffer.from(file.buffer, "base64");
const imageByteArray = new Uint8Array(imageBuffer);
const options = {
resumable: false,
metadata: { contentType: file.mimetype },
predefinedAcl: "publicRead",
public: true,
};
const files = bucket.file(`img/${file.originalname}`);
await files.save(imageByteArray, options);
const field = await files.getMetadata();
console.log(field);
} catch (e) {
console.error(e);
}
Комментарии:
1. Привет, могу я узнать, о каком URL вы говорите? А также не могли бы вы вкратце объяснить свой код, например, что вы делаете или пытаетесь сделать, и что ожидается, но что происходит вместо этого и т. Д.?
Ответ №1:
С помощью Node.js Admin SDK вы должны сделать следующее, используя getSignedUrl()
метод:
const { initializeApp, cert } = require('firebase-admin/app');
const { getStorage } = require('firebase-admin/storage');
const serviceAccount = require('./path/to/serviceAccountKey.json');
initializeApp({
credential: cert(serviceAccount),
storageBucket: '<BUCKET_NAME>.appspot.com'
});
// ...
async function getSignedURL(fileName) {
const bucket = getStorage().bucket();
// Or const bucket = admin.storage().bucket(); like you do in your question, depending on where and how you execute the code
const file = bucket.file(fileName);
const signedURLconfig = { action: 'read', expires: '01-01-2030' };
// See more options of the config object in the SDK documentation (link above)
const signedURLArray = await file.getSignedUrl(signedURLconfig);
return signedURLArray[0];
}
// Use the above function to save the signed URL to Firestore
const fileName = "...";
getSignedURL(fileName)
.then(signedURL => {
admin.firestore().collection("urls_collection")
.add({url: signedURL, foo: "bar", bar: "foo"})
});
Комментарии:
1. И , затем, как попасть в общедоступный URL-адрес и сохранить его в базе данных?
2. Просто вызовите асинхронный метод getSignedUrl и напишите документ Firestore, содержащий возвращаемое значение, см. Обновление.
3. о , ух ты, огромное тебе спасибо 😊