有没有一种简单的方法可以从 Angular 模板中的 firebase-storage 路径获取下载 url

Posted

技术标签:

【中文标题】有没有一种简单的方法可以从 Angular 模板中的 firebase-storage 路径获取下载 url【英文标题】:Is there a simple way to get the download url from firesbase-storage paths in Angular templates 【发布时间】:2020-11-24 03:37:41 【问题描述】:

我见过一些例子,人们将实际下载路径保存到 firestore,然后在模板中使用该图像。

但是我不太确定这是保存文件位置的正确方法。原因很简单,在检索下载 url 时它包含令牌,我假设这是为当前用户获取下载 url。

所以我在收到的每个模板上都做了什么,我必须获取 downloadUrl 以及下载 url 的组件代码。有没有办法避免这种情况,直接在模板文件中。所以我不需要操作简单的显示数据,其中包含要存储的图像参考。

【问题讨论】:

【参考方案1】:

您可以为此创建一个简单的管道:

import  Pipe, PipeTransform  from '@angular/core';
import  AngularFireStorage  from '@angular/fire/storage';
import  Observable, from  from 'rxjs';

@Pipe(
   name: 'firestoagePath'
)
export class FirestoagePathPipe implements PipeTransform 
    constructor(private storage: AngularFireStorage)  
    transform(value: string, ...args: unknown[]): Observable<string> 
      if (typeof (value) === 'string') 
          const storageRef = this.storage.ref(value);
          return storageRef.getDownloadURL();
      
      return from(value);
   

使用管道,您可以对 firestore 进行注入,这很好,获取下载 url 并将其与异步管道链接,如下所示:

<img *ngIf="firestoreObject.image.croppedSource | firestoagePath | async as imageSource"
    [src]="imageSource">

在此示例中,firestoreObject 是一个随机对象,其图像具有指向 firestorage 上裁剪图像文件位置的字符串路径。

【讨论】:

以上是关于有没有一种简单的方法可以从 Angular 模板中的 firebase-storage 路径获取下载 url的主要内容,如果未能解决你的问题,请参考以下文章

模板驱动形式将所有内容标记为已触摸 - Angular 7

有没有一种方法可以在 Django 的同一个模板中呈现多个视图?

有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?

Angular 原理图没有从模板创建文件

从 Swagger API 规范生成 Angular2 表单

有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?