编辑-这是在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),然后以这种方式访问方法?
谢谢。