使用Firebase SDK上传文件

时间:2018-12-14 03:05:57

标签: javascript node.js firebase google-cloud-platform firebase-storage

编辑-这是在Digital Ocean上运行的脚本的一部分,用于解析PDF文件。因此,我正在使用Firebase Admin SDK访问,因为我正在服务器上运行它。归根结底,我希望能够将文件上传到我的在线存储库,基本上是将文件上传到可公开访问的URL,然后将其发送给相关用户。

我已将文件手动上传到我的存储设备中:https://firebasestorage.googleapis.com/v0/b/federal-register.appspot.com/o/nj.jpg?alt=media&token=891a1574-7cc0-44c1-a954-6dcc0844f796

我希望能够以编程方式将文件从服务器上载到Firebase的存储部分,并使它们也可以公开访问(例如jpeg)。


原始问题–––

我正在尝试使用Firebase Admin SDK使用Node.js将文件(PDF文件)上传到我的Firebase存储中。我已经在Admin SDK中成功使用了数据库,但是对存储位有点困惑...

这是我现在配置我的管理SDK的方式:

const admin = require("firebase-admin");
const serviceAccount = require("../keys/admin.key.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://federal-register.firebaseio.com",
  storageBucket: "federal-register.appspot.com/"
});

const bucket = admin.storage().bucket();

如果我将存储桶注销到控制台,则会得到一个复杂的对象,其中包含各种访问控制列表信息:

Bucket {
  name: 'federal-register.appspot.com/',
  storage: Storage {},
  userProject: undefined,
  acl:
   Acl {
     owners:
      { addAllAuthenticatedUsers: [Function],
        deleteAllAuthenticatedUsers: [Function],
        addAllUsers: [Function],
        deleteAllUsers: [Function],
        addDomain: [Function],
        deleteDomain: [Function],
        addGroup: [Function],
        deleteGroup: [Function],
        addProject: [Function],
        deleteProject: [Function],
        addUser: [Function],
        deleteUser: [Function] },
     readers:
      { addAllAuthenticatedUsers: [Function],
        deleteAllAuthenticatedUsers: [Function],
        addAllUsers: [Function],
        deleteAllUsers: [Function],
        addDomain: [Function],
        deleteDomain: [Function],
        addGroup: [Function],
        deleteGroup: [Function],
        addProject: [Function],
        deleteProject: [Function],
        addUser: [Function],
        deleteUser: [Function] },
     writers:
      { addAllAuthenticatedUsers: [Function],
        deleteAllAuthenticatedUsers: [Function],
        addAllUsers: [Function],
        deleteAllUsers: [Function],
        addDomain: [Function],
        deleteDomain: [Function],
        addGroup: [Function],
        deleteGroup: [Function],
        addProject: [Function],
        deleteProject: [Function],
        addUser: [Function],
        deleteUser: [Function] },
     pathPrefix: '/acl',
     request_: [Function: bound wrapper],
     default:
      Acl {
        owners: [Object],
        readers: [Object],
        writers: [Object],
        pathPrefix: '/defaultObjectAcl',
        request_: [Function: bound wrapper] } },
  iam:
   Iam {
     request_: [Function: bound wrapper],
     resourceId_: 'buckets/federal-register.appspot.com/' } }

我读到,这基本上是在“包装” g-cloud文档中提到的功能。本质上,firebase包裹了g-cloud。我试图使用适当的g-cloud函数(此处:https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-nodejs)上传我的文档,但是没有运气。

   bucket.upload(filePath);

但是,我得到一个错误:(rejection id: 1): ApiError: Error during request.

我之所以被Firebase吸引是因为它相对易用,如果不需要的话,我宁愿不必安装和学习Google的云架构-特别是如果Firebase已经包装好并给我了通过Firebase Admin SDK访问...

是否有一种方法可以仅使用Firebase SDK上传文件?如果无法实现,那么我是否必须安装Google模块(npm install-保存@ google-cloud / storage),然后以这种方式访问​​方法?

谢谢。

0 个答案:

没有答案