在我的情况下,我有一个URL列表,我想从这些url下载每个文件并将其组织在firebase存储桶中,我的问题是我无法通过nodejs javascript /在Firebase存储桶中创建文件夹打字稿。
好了,firebase存储提供ref()和child方法来上传子文件夹中的文件(请参见this),但是firebase仅为firebase客户端库提供了这些方法,这并不是说我们不能在nodejs中使用客户端库。但是当您在nodejs中连接Firebase客户端库时,它们隐藏了一些名称空间,而存储就是其中之一(请参见this)。
我很高兴他们分别考虑了前端和后端,因为这个原因使得前端和后端在安全性和用例方面有着完全不同的情况,所以他们在nodejs中真正使用的是firebase admin,我看不到ref他们在官方文档中说的this和子方法不是我要上传的文件的其他任何命名方法,也不是使文件夹进入子目录的任何方法,当我从计算机上载文件时,该文件将保存在即使我可以从Firebase控制台手动创建文件夹,也要使用与计算机中的文件名相同的名称来命名存储分区根目录,但它不能满足我的要求,以确保必须以某种方式以编程方式创建文件夹。
我也尝试过使用Google云存储库const {Storage} = require('@google-cloud/storage');
,但事实证明,firebase管理员和gogole云库共享同一文档,并且至少在上传文件部分具有相同的界面。
好吧,我花了整整一天的时间(因为从凌晨4:46开始,也是整晚)尝试不同的库,并研究它们的文档,但我发现它们很少杂乱无章,也缺少代码示例。
任何帮助将不胜感激,到目前为止,我的代码段来自其文档并正确上传文件:
import "firebase/firestore"
admin.initializeApp({
credential: admin.credential.cert("./../path-to-service account-cert.json"),
databaseURL: 'gs://bilal-assistant-xxxxx.appspot.com'
});
const quran_bucket = admin.storage().bucket("quran-bucket");
quran_bucket.upload("./my_computer_path/fatiha.mp3", {
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000',
}
}).then(uploadResponse => {
console.log(` uploaded complete.`);
}).catch((reason: any) => {
console.log("reason: ", reason);
})
我只想将音频文件保存在文件夹存储桶中,而不是存储在存储桶根目录中
答案 0 :(得分:5)
根据API文档,upload()将UploadOptions对象作为第二个参数。您将要使用该对象的文档destination
属性来指定存储中文件的名称:
quran_bucket.upload("./my_computer_path/fatiha.mp3", {
destination: 'audio/juz30/fatiha.mp3',
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000',
}
})
您可能不想打扰gzip的mp3,因为它已经被压缩并且不会进一步压缩。