如何从 Firebase 保存和显示 Firestore 数据库中的图像

问题描述 投票:0回答:0

我正在使用 Flask 使用 Python 编写 IT 学习应用程序。我使用 Firestore Database 作为数据库。一切都很好,但我想知道是否可以将照片保存到给定的集合并从网站上的集合中读取/显示这张照片?

我的端点更改用户设置,我希望可以上传这张照片,当然,在正确上传显示之后:

@blueprint.route("/employer_settings", methods=["GET", "POST"])
@login_required
def employer_settings():
    error_message = None
    employer_data = {}

    try:
        employer_uid = session.get("user", {}).get("uid")
        employer_ref = db.collection("Company").document(employer_uid)
        employer_settings = employer_ref.get().to_dict()

        # Dodaj dane zespołu do słownika
        if employer_settings:
            employer_data = employer_settings

        if request.method == "POST":
            # Pobierz dane z formularza
            name = request.form.get("name")
            phone = request.form.get("phone")

            # Aktualizuj dane zespołu w bazie danych
            employer_ref.update(
                {
                    "first_name": name,
                    "phone": phone,
                }
            )

            # Zaktualizuj dane w słowniku
            employer_data["first_name"] = name
            employer_data["phone"] = phone

    except Exception as e:
        error_message = str(e)
        print("Error retrieving data:", e)  # Dodaj print dla błędu

    return render_template(
        "employer_settings.html",
        employer_data=employer_data,
        error_message=error_message,
    )

以及他在 html 中的观点:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Ustawienia firmy</title>
    <script src="/static/script/search_script.js" defer></script>
  </head>
  <body>
    <a href="/employer_main_page"
    ><img
      src="/static/img/logo.PNG"
      alt="logo"
      class="company-logo"
      width="80"
      height="80" /></a
      ><br />
      <form id="searchForm">
        <label for="global_search_query">Wyszukaj pracowników:</label>
        <input type="text" id="global_search_query" name="query" required />
      </form>
      <br />
    <!-- Wyświetl wyniki na bieżącej stronie -->
      <div id="searchResults"></div>
      <br />
      <br />

    {# Wyświetlanie błędu #} {% if error_message %}
        <p style="color: red">{{ error_message }}</p>
      {% endif %}

      <h1>Dane osobowe firmy</h1>

    {# Formularz do aktualizacji danych zespołu #}
      <form method="post">
        <label for="name">Nazwa firmy:</label>
        <input
          type="text"
          id="name"
          name="name"
          value="{{ employer_data['first_name'] }}"
        /><br /><br />

        <label for="phone">Numer telefonu:</label>
        <input
          type="text"
          id="phone"
          name="phone"
          value="{{ employer_data['phone'] }}"
        /><br /><br />

        <input type="submit" value="Zapisz zmiany" />
      </form>

      <br />
      <form method="post" action="{{ url_for('web_routes.delete_account_employer') }}">
        <input type="submit" value="Usuń konto" style="background-color: red; color: white;" />
      </form>

      <a href="{{ url_for('web_routes.employer_main_page') }}"
      >< Powrót na stronę główną</a
        >
      </body>
    </html>

是否可以修改它来做到这一点?我希望将其包含在其中的集合:

Company>id_logged_employer>字段“图像””/></p>
    </question>
	<answer tick=

除非您要存储非常小的图像或 Base64 编码的图标,否则我建议不要将它们存储在 Firestore 中。

您确实可以存储本机二进制数据,但请注意,在 Firestore 中的单个文档中可以放入多少数据时,存在一些限制。因此,您最多可以存储 1 MiB(1,048,576 字节)。因此,在存储图像的情况下,您可能很快就会遇到此限制。

请注意,Firestore 旨在存储“不同类型”的数据,而不是文件。因此,您最好的选择是使用名为 Cloud Storage for Firebase 的 Firebase 产品,该产品确实旨在存储图像、音频、视频或其他用户生成的内容。 因此,可以考虑将图像存储在 Cloud Storage for Firebase 中,并将相应的 URL 存储在

Firestore

实时数据库 中。这是推荐的方式,因为 Cloud Storage for Firebase 在存储成本方面大约便宜 7 倍,并且在最大文件大小方面有更大的限制。

python firebase google-cloud-platform google-cloud-firestore firebase-storage
© www.soinside.com 2019 - 2024. All rights reserved.