获取图片 url Firebase 存储(管理员)

Posted

技术标签:

【中文标题】获取图片 url Firebase 存储(管理员)【英文标题】:Get image url Firebase storage (admin) 【发布时间】:2018-12-07 15:58:00 【问题描述】:

我必须将图像上传到 Firebase 存储。我没有使用网络版本的存储(我不应该使用它)。我正在使用 firebase 管理员。 没问题,我上传文件没有问题,我在变量“文件”中得到结果。

如果我访问 firebase 存储控制台,图像就在那里。好的。

return admin.storage().bucket().upload(filePath, destination: 'demo/images/restaurantCover.jpg', 
                                                            metadata:contentType: 'image/jpeg'
                                                            public: true
                                                           ).then(file =>
            console.log(`file --> $JSON.stringify(file, null, 2)`);
            let url = file["0"].metadata.mediaLink; // image url
            return resolve(res.status(200).send(data:file)); // huge data
        ) ;

现在,我有一些问题。

    为什么有这么多信息和这么多对象来响应upload () 方法?查看巨大的对象,我在元数据中发现了一个名为mediaLink 的属性,它是图像的下载 url。但是……

    为什么 url 与 firebase 显示的不同?为什么我找不到downloadURL 属性?

    如何获取firebase的url?

火力基地:https://firebasestorage.googleapis.com/v0/b/myfirebaseapp.appspot.com/o/demo%2Fimages%2Fthumb_restaurant.jpg?alt=media&token=bee96b71-2094-4492-96aa-87469363dd2e

媒体链接:https://www.googleapis.com/download/storage/v1/b/myfirebaseapp.appspot.com/o/demo%2Fimages%2Frestaurant.jpg?generation=1530193601730593&alt=media

    如果我使用 mediaLink url,不同的 url 有什么问题吗? (从 ios 和 Web 客户端读取、更新)

【问题讨论】:

您找到解决方案了吗?我正在使用与 nodejs 相同的设置(firebase 管理员),并且当前将 mediaLink URL 存储在 mongodb 中作为参考。 @PascalLamers 还没有 我也有这个问题,我认为这与管理 api 与谷歌云重叠的事实有关。回调与我没有设置的谷歌云中的存储系统有关,并且没有返回任何关于 firebase :/.现在我正在梳理firebase链接并使用模板文字来填写相关信息。使用模板中的“目标”,您必须将正斜杠替换为“%2F”。我忽略了令牌查询,因为我认为它对公共对象没有任何影响。希望 firebase 能把它修复成更像客户端 sdk :( 【参考方案1】:

查看Google Cloud Storage: Node.js Client 文档,他们有一个指向sample code 的链接,它准确地显示了如何执行此操作。另外,请参阅File class documentation 示例(如下)

// Imports the Google Cloud client library
const Storage = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

// Gets the metadata for the file
storage
  .bucket(bucketName)
  .file(filename)
  .getMetadata()
  .then(results => 
    const metadata = results[0];

    console.log(`File: $metadata.name`);
    console.log(`Bucket: $metadata.bucket`);
    console.log(`Storage class: $metadata.storageClass`);
    console.log(`Self link: $metadata.selfLink`);
    console.log(`ID: $metadata.id`);
    console.log(`Size: $metadata.size`);
    console.log(`Updated: $metadata.updated`);
    console.log(`Generation: $metadata.generation`);
    console.log(`Metageneration: $metadata.metageneration`);
    console.log(`Etag: $metadata.etag`);
    console.log(`Owner: $metadata.owner`);
    console.log(`Component count: $metadata.component_count`);
    console.log(`Crc32c: $metadata.crc32c`);
    console.log(`md5Hash: $metadata.md5Hash`);
    console.log(`Cache-control: $metadata.cacheControl`);
    console.log(`Content-type: $metadata.contentType`);
    console.log(`Content-disposition: $metadata.contentDisposition`);
    console.log(`Content-encoding: $metadata.contentEncoding`);
    console.log(`Content-language: $metadata.contentLanguage`);
    console.log(`Metadata: $metadata.metadata`);
    console.log(`Media link: $metadata.mediaLink`);
  )
  .catch(err => 
    console.error('ERROR:', err);
  );

【讨论】:

感谢您的回复,但是,我有图像的 url 并正确上传到存储,我的问题是其他的。例如,为什么 url 不同?如何获取出现在 firebase 控制台中的 url?

以上是关于获取图片 url Firebase 存储(管理员)的主要内容,如果未能解决你的问题,请参考以下文章

firebase 存储 - 获取图像 URL [重复]

将多个图像存储到 Firebase 并获取 url

如何从firebase存储中获取图片,图片的网址在firestore中。

上传图片后在 Firebase 中如何获取 Url? [复制]

成功将图像上传到 Firebase 存储后,Firebase 获取下载 URL

Firebase getDownloadURL() 在获取图片 URL 时真的很慢