首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase Storage Admin SDK:从映像blob上传

Firebase Storage Admin SDK:从映像blob上传
EN

Stack Overflow用户
提问于 2020-06-25 01:20:02
回答 2查看 827关注 0票数 1

在firebase存储的web sdk中,您可以使用upload an image from Blob data。我有一个nodeJS应用程序,想要将图片从blob数据上传到我的存储桶中。在文档中,如果运行节点服务器环境,建议使用admin SDK。但我在firbase storage admin documentation中找不到这个功能。

下面是我的代码:

代码语言:javascript
复制
const admin = require('firebase-admin');
const serviceAccount = require(`./credentials/my-keyfile.json`);
const app = admin.initializeApp({ 
  credential: admin.credential.cert(serviceAccount) 
});
const storage = app.storage();

// Get Blob data from an external ImageUrl
const axios = require("axios");
const getBlobFromUrl = (url) => {
  const response = await axios.get(url, { responseType: "blob" });
  return response.data;
}

const blobData = getBlobFromUrl("https://images.unsplash.com/photo-1591476315349-faa1c8e6f567?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max")
// MY QUESTION -> how can i upload that blob data to my storage?
EN

回答 2

Stack Overflow用户

发布于 2021-12-17 21:49:34

我最近也在尝试类似的做法,从Node服务器(使用Firebase Admin SDK)向Firebase Storage写入内存中的文件。

我意识到我需要使用Google Cloud Storage的Node API来解决这个问题(在docs中提到过)。这是使用谷歌云存储进行流式传输的相关文档页面:https://cloud.google.com/storage/docs/streaming#storage-stream-upload-object-nodejs

以下是基本步骤:

  1. 设置适当的storageBucket地址(例如gs://APP-NAME.appspot.com/),您可以从您的Firebase存储控制台获取该地址。另外,获取适当的Firebase存储和存储桶JS对象。遵循https://firebase.google.com/docs/storage/admin/start
  2. get中的示例,即来自blob/文件的字节数据流:https://developer.mozilla.org/en-US/docs/Web/API/Blob/stream
  3. use Google Cloud Storage的API,将该数据流管道/写入到存储桶中的指定位置:https://cloud.google.com/storage/docs/streaming#storage-stream-upload-object-nodejs

因此,按照上面的文档,您将执行如下操作:

代码语言:javascript
复制
// Create a reference to a file object.
// myBucket is the bucket obtained in step 1 above
const file = myBucket.file("directoryName/imageName.png");

// step 2: get ReadableStream from Blob
const stream = blobData.stream();

// step 3: asynchronously pipe/write to file in cloud
async function streamFileUpload() {
  stream.pipe(file.createWriteStream()).on('finish', () => {
    // The file upload is complete
  });
}

streamFileUpload().catch(console.error);

在此之后,您将看到您的文件上传到directoryName/imageName.png下的Firebase存储。

票数 1
EN

Stack Overflow用户

发布于 2020-06-25 02:26:56

您在uploading an image with Blob data上发布的第一个链接包含有关如何使用client sdk执行此操作的信息。

当您使用Admin SDK时,使用案例是后端,例如云函数。您在帖子中显示的内容将用于此用例。

有关如何使用客户端sdk上传图像的实现,请查看一些快速入门指南以及代码实验室。

如果您主要使用Blob,您可以查看一些库,如busboy,然后发送HTTP请求。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62560652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档