From 304467e3f515c1ff00ded5da3a25867972ee3127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Mon, 3 Feb 2025 11:05:20 +0800 Subject: [PATCH] fix: not install libmagic raise error (#13146) --- api/Dockerfile | 2 ++ api/controllers/common/helpers.py | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index ee6199c8f7..85a7349c9b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -58,6 +58,8 @@ RUN apt-get update \ && apt-get install -y --no-install-recommends expat=2.6.4-1 libldap2=2.6.9+dfsg-1 perl=5.40.0-8 libsqlite3-0=3.46.1-1 zlib1g=1:1.3.dfsg+really1.3.1-1+b1 \ # install a chinese font to support the use of tools like matplotlib && apt-get install -y fonts-noto-cjk \ + # install libmagic to support the use of python-magic guess MIMETYPE + && apt-get install -y libmagic1 \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* diff --git a/api/controllers/common/helpers.py b/api/controllers/common/helpers.py index fa42ce4c43..2979375169 100644 --- a/api/controllers/common/helpers.py +++ b/api/controllers/common/helpers.py @@ -1,13 +1,32 @@ import mimetypes import os +import platform import re import urllib.parse +import warnings from collections.abc import Mapping from typing import Any from uuid import uuid4 import httpx -import magic + +try: + import magic +except ImportError: + if platform.system() == "Windows": + warnings.warn( + "To use python-magic guess MIMETYPE, you need to run `pip install python-magic-bin`", stacklevel=2 + ) + elif platform.system() == "Darwin": + warnings.warn("To use python-magic guess MIMETYPE, you need to run `brew install libmagic`", stacklevel=2) + elif platform.system() == "Linux": + warnings.warn( + "To use python-magic guess MIMETYPE, you need to run `sudo apt-get install libmagic1`", stacklevel=2 + ) + else: + warnings.warn("To use python-magic guess MIMETYPE, you need to install `libmagic`", stacklevel=2) + magic = None # type: ignore + from pydantic import BaseModel from configs import dify_config @@ -49,7 +68,7 @@ def guess_file_info_from_response(response: httpx.Response): mimetype = response.headers.get("Content-Type", "application/octet-stream") # Use python-magic to guess MIME type if still unknown or generic - if mimetype == "application/octet-stream": + if mimetype == "application/octet-stream" and magic is not None: try: mimetype = magic.from_buffer(response.content[:1024], mime=True) except magic.MagicException: