Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件上载到firebase存储,以便通过控制台下载?_Firebase - Fatal编程技术网

如何将文件上载到firebase存储,以便通过控制台下载?

如何将文件上载到firebase存储,以便通过控制台下载?,firebase,Firebase,通过我通过Nodejs Admin SDK上传的firebase控制台从firebase存储下载文件时遇到问题。我可以成功上传文件,并在firebase控制台的firebase存储中看到它们,但当我单击任何文件时,名称字段不是链接,无法下载文件。如果我使用Flatter Firebase库或Firebase控制台UI上传相同的文件,那么我可以通过单击该文件,然后单击名称字段(这是一个链接)来下载该文件。我没有看到我通过控制台UI上传的文件(可下载)和我通过NodeJS Admin SDK上传的文

通过我通过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

这是我的上传代码:

/**
 * 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并重新加载页面,将生成预览

要以编程方式执行此操作,可以使用