如何将文件上载到firebase存储,以便通过控制台下载?
通过我通过Nodejs Admin SDK上传的firebase控制台从firebase存储下载文件时遇到问题。我可以成功上传文件,并在firebase控制台的firebase存储中看到它们,但当我单击任何文件时,名称字段不是链接,无法下载文件。如果我使用Flatter Firebase库或Firebase控制台UI上传相同的文件,那么我可以通过单击该文件,然后单击名称字段(这是一个链接)来下载该文件。我没有看到我通过控制台UI上传的文件(可下载)和我通过NodeJS Admin SDK上传的文件有什么不同。有人知道上传文件时需要做什么,以便您可以通过控制台UI下载文件吗 我正在尝试上载压缩的PB文件,这些文件的名称为:FILE-1.PB.zip,内容类型为:application/x-zip-compressed 这是我的上传代码:如何将文件上载到firebase存储,以便通过控制台下载?,firebase,Firebase,通过我通过Nodejs Admin SDK上传的firebase控制台从firebase存储下载文件时遇到问题。我可以成功上传文件,并在firebase控制台的firebase存储中看到它们,但当我单击任何文件时,名称字段不是链接,无法下载文件。如果我使用Flatter Firebase库或Firebase控制台UI上传相同的文件,那么我可以通过单击该文件,然后单击名称字段(这是一个链接)来下载该文件。我没有看到我通过控制台UI上传的文件(可下载)和我通过NodeJS Admin SDK上传的文
/**
* Store file at specified path in cloud storage, default bucket. If there is already a file
* at destination it is overwritten.
* @param {String} filePath - path of file to store
* @param {String} destination - path to store file at in cloud storage
* @param {String} contentType - mime type of file.
* @param {String} bucket - OPTIONAL: if specified upload to this bucket instead of default bucket.
*/
async function storeFile(filePath, destination, contentType, bucketName) {
bucketName = bucketName || globals.firebase.storageBucket;
const bucket = admin.storage().bucket(bucketName);
try {
// Ref: https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request_properties_JSON
const options = {
destination,
metadata: {
contentType
}
};
await bucket.upload(filePath, options);
console.log(`Successfully copied ${filePath} to ${destination} in ${bucketName}`);
} catch (error) {
console.error(`Failed to upload file ${filePath} to ${destination} with error: `, error);
}
}
更新:我检查了通过控制台UI和nodejs admin sdk上传的文件,唯一的区别是控制台上传的文件在其metadata.metadata对象上填充了firebaseStorageDownloadTokens字段。我查看了它,当使用web库时,可以通过调用getDownloadURL()(ref:,)填充该字段。不过,我看不出使用nodejs admin sdk填充此字段。我打开了firebase支持票证,他们通过提供一个可以在每个文件上设置下载URL的脚本来解决问题。他们的答复: Admin SDK和gsutil,它们跳过添加一些元数据导致 尝试使用客户端SDK时出现不同错误。这种行为是错误的 一个已知的问题,我们的工程团队已经在解决它,但是 我们没有任何预计到达时间或时间表。您可以手动添加此元数据 或以编程方式: 如您所见,如果您单击Createwaccesstoken并重新加载页面,将生成预览 要以编程方式执行此操作,可以使用