up2minio


Nameup2minio JSON
Version 0.0.1 PyPI version JSON
download
home_pagehttps://www.dfql.io
Summary将图片上传至 Minio 的扩展模块
upload_time2024-11-23 02:14:05
maintainerNone
docs_urlNone
authordaofengqianlin
requires_python>=3.6
licenseApache 2.0
keywords sapic minio storage hook
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            up2minio - Sapic 图床的 Minio 存储钩子扩展
==============================================

**许可证**: 本项目基于 `Apache 2.0 许可证 <https://www.apache.org/licenses/LICENSE-2.0>`_ 开源,您可以自由使用、修改和分发本项目,但需保留原始版权声明及许可证信息。

---

简介
----

``up2minio`` 是基于 `Sapic <https://github.com/daofengqianlin/Sapic>`_ 的一个扩展模块,用于将上传的图片保存到自建的 ``Minio`` 对象存储中。它支持通过 Minio 的 S3 兼容 API 上传图片,并提供必要的配置与管理功能。

---

安装
----

正式 ‖ 开发版本
^^^^^^^^^^^^^^^^

开发版本安装
`````````````
运行以下命令安装开发版本:

.. code-block:: bash

    pip install -U git+https://github.com/Daofengql/Sapicbed-Minio-Hook.git@main

---

开始使用
--------

环境准备
^^^^^^^^^

1. 部署并运行 `Sapic 图床 <https://github.com/daofengqianlin/Sapic>`_。
2. 确保 Minio 服务已搭建并配置了所需的存储桶(Bucket)。

添加扩展
^^^^^^^^^

1. 登录 Sapic 站点管理员后台。
2. 进入 **站点管理 > 钩子扩展** 页面。
3. 添加钩子扩展:
   - **模块名称**:输入 ``up2minio``。
   - 提交保存后,模块会被加载(请确保扩展模块已通过 pip 安装到服务器)。

配置扩展
^^^^^^^^^

1. 进入 **站点管理 > 网站设置** 页面。
2. 在页面底部的钩子配置区域,填写 Minio 的相关信息:
   - **Bucket**:Minio 存储桶名称(需公开可读)。
   - **Region**:Minio 服务端的节点名称。
   - **AccessKey**:对存储桶有权限的 Access Key。
   - **SecretKey**:对存储桶有权限的 Secret Key。
   - **Endpoint**:Minio 服务的 S3 API 地址(如 ``127.0.0.1:9000``,无需包含协议头)。
   - **CDN Domain**:自定义 CDN 加速域名,需包含协议头,例如 ``https://cdn.example.com``。
   - **存储根目录**:图片存储在存储桶内的路径(非存储桶名称)。

启用存储后端
^^^^^^^^^^^^^

1. 在 **站点管理 > 网站设置 > 上传区域** 页面。
2. 设置存储后端为 ``up2minio``。
3. 保存设置后,所有上传的图片将存储到 Minio。

---

功能特点
--------

1. **扩展性**:基于 Sapic 的钩子架构,可无缝集成。
2. **支持自定义 CDN**:通过配置 CDN 域名优化访问速度。
3. **存储路径灵活**:支持自定义 Minio 存储根目录。
4. **安全性**:通过 AK/SK 验证访问,确保数据安全。

---

API 方法
--------

``get_bucket_obj()``
^^^^^^^^^^^^^^^^^^^^
返回 Minio 客户端对象。

- **用途**:初始化 Minio 客户端。

``upimg_save(**kwargs)``
^^^^^^^^^^^^^^^^^^^^^^^^
上传图片到 Minio。

- **参数**:
  - ``filename``:图片文件名。
  - ``stream``:图片文件流。
  - ``upload_path``:上传路径。
- **返回**:字典,包含上传结果(``src`` 为图片的完整 URL)。

``upimg_delete(sha, upload_path, filename, basedir, save_result)``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

删除存储在 Minio 中的图片。

- **参数**:
  - ``sha``:图片的哈希值。
  - ``upload_path``:上传路径。
  - ``filename``:图片文件名。
  - ``basedir``:存储根目录。
  - ``save_result``:保存时的结果。
- **返回**:无。

---

注意事项
--------

1. **HTTPS 限制**:目前仅支持 HTTPS,若 Minio 不支持 HTTPS,请使用 Nginx 配置反向代理解决。
2. **存储桶权限**:存储桶需设置为公开可读,以便图片能被外部访问。
3. **路径配置**:
   - **Bucket** 和 **存储根目录** 配置正确,否则会导致文件存储失败。
4. **CDN 配置**:若未配置 CDN 域名,将直接使用 Minio Endpoint 地址。

---

示例配置
--------

- **Bucket**: ``my-images``
- **Region**: ``us-east-1``
- **AccessKey**: ``your-access-key``
- **SecretKey**: ``your-secret-key``
- **Endpoint**: ``minio.example.com:9000``
- **CDN Domain**: ``https://cdn.example.com``
- **存储根目录**: ``uploads/images``

---

许可证
------

本项目基于 `Apache 2.0 许可证 <https://www.apache.org/licenses/LICENSE-2.0>`_ 发布,用户可自由使用、修改和分发,但需保留原始版权声明及许可证信息。

---

            

Raw data

            {
    "_id": null,
    "home_page": "https://www.dfql.io",
    "name": "up2minio",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "sapic minio storage hook",
    "author": "daofengqianlin",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/5a/bf/694c3d5f6b1fda570aa0888c08c5ad0954fd33ec30e3718ce9dde648ee62/up2minio-0.0.1.tar.gz",
    "platform": null,
    "description": "up2minio - Sapic \u56fe\u5e8a\u7684 Minio \u5b58\u50a8\u94a9\u5b50\u6269\u5c55\n==============================================\n\n**\u8bb8\u53ef\u8bc1**: \u672c\u9879\u76ee\u57fa\u4e8e `Apache 2.0 \u8bb8\u53ef\u8bc1 <https://www.apache.org/licenses/LICENSE-2.0>`_ \u5f00\u6e90\uff0c\u60a8\u53ef\u4ee5\u81ea\u7531\u4f7f\u7528\u3001\u4fee\u6539\u548c\u5206\u53d1\u672c\u9879\u76ee\uff0c\u4f46\u9700\u4fdd\u7559\u539f\u59cb\u7248\u6743\u58f0\u660e\u53ca\u8bb8\u53ef\u8bc1\u4fe1\u606f\u3002\n\n---\n\n\u7b80\u4ecb\n----\n\n``up2minio`` \u662f\u57fa\u4e8e `Sapic <https://github.com/daofengqianlin/Sapic>`_ \u7684\u4e00\u4e2a\u6269\u5c55\u6a21\u5757\uff0c\u7528\u4e8e\u5c06\u4e0a\u4f20\u7684\u56fe\u7247\u4fdd\u5b58\u5230\u81ea\u5efa\u7684 ``Minio`` \u5bf9\u8c61\u5b58\u50a8\u4e2d\u3002\u5b83\u652f\u6301\u901a\u8fc7 Minio \u7684 S3 \u517c\u5bb9 API \u4e0a\u4f20\u56fe\u7247\uff0c\u5e76\u63d0\u4f9b\u5fc5\u8981\u7684\u914d\u7f6e\u4e0e\u7ba1\u7406\u529f\u80fd\u3002\n\n---\n\n\u5b89\u88c5\n----\n\n\u6b63\u5f0f \u2016 \u5f00\u53d1\u7248\u672c\n^^^^^^^^^^^^^^^^\n\n\u5f00\u53d1\u7248\u672c\u5b89\u88c5\n`````````````\n\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5\u5f00\u53d1\u7248\u672c\uff1a\n\n.. code-block:: bash\n\n    pip install -U git+https://github.com/Daofengql/Sapicbed-Minio-Hook.git@main\n\n---\n\n\u5f00\u59cb\u4f7f\u7528\n--------\n\n\u73af\u5883\u51c6\u5907\n^^^^^^^^^\n\n1. \u90e8\u7f72\u5e76\u8fd0\u884c `Sapic \u56fe\u5e8a <https://github.com/daofengqianlin/Sapic>`_\u3002\n2. \u786e\u4fdd Minio \u670d\u52a1\u5df2\u642d\u5efa\u5e76\u914d\u7f6e\u4e86\u6240\u9700\u7684\u5b58\u50a8\u6876\uff08Bucket\uff09\u3002\n\n\u6dfb\u52a0\u6269\u5c55\n^^^^^^^^^\n\n1. \u767b\u5f55 Sapic \u7ad9\u70b9\u7ba1\u7406\u5458\u540e\u53f0\u3002\n2. \u8fdb\u5165 **\u7ad9\u70b9\u7ba1\u7406 > \u94a9\u5b50\u6269\u5c55** \u9875\u9762\u3002\n3. \u6dfb\u52a0\u94a9\u5b50\u6269\u5c55\uff1a\n   - **\u6a21\u5757\u540d\u79f0**\uff1a\u8f93\u5165 ``up2minio``\u3002\n   - \u63d0\u4ea4\u4fdd\u5b58\u540e\uff0c\u6a21\u5757\u4f1a\u88ab\u52a0\u8f7d\uff08\u8bf7\u786e\u4fdd\u6269\u5c55\u6a21\u5757\u5df2\u901a\u8fc7 pip \u5b89\u88c5\u5230\u670d\u52a1\u5668\uff09\u3002\n\n\u914d\u7f6e\u6269\u5c55\n^^^^^^^^^\n\n1. \u8fdb\u5165 **\u7ad9\u70b9\u7ba1\u7406 > \u7f51\u7ad9\u8bbe\u7f6e** \u9875\u9762\u3002\n2. \u5728\u9875\u9762\u5e95\u90e8\u7684\u94a9\u5b50\u914d\u7f6e\u533a\u57df\uff0c\u586b\u5199 Minio \u7684\u76f8\u5173\u4fe1\u606f\uff1a\n   - **Bucket**\uff1aMinio \u5b58\u50a8\u6876\u540d\u79f0\uff08\u9700\u516c\u5f00\u53ef\u8bfb\uff09\u3002\n   - **Region**\uff1aMinio \u670d\u52a1\u7aef\u7684\u8282\u70b9\u540d\u79f0\u3002\n   - **AccessKey**\uff1a\u5bf9\u5b58\u50a8\u6876\u6709\u6743\u9650\u7684 Access Key\u3002\n   - **SecretKey**\uff1a\u5bf9\u5b58\u50a8\u6876\u6709\u6743\u9650\u7684 Secret Key\u3002\n   - **Endpoint**\uff1aMinio \u670d\u52a1\u7684 S3 API \u5730\u5740\uff08\u5982 ``127.0.0.1:9000``\uff0c\u65e0\u9700\u5305\u542b\u534f\u8bae\u5934\uff09\u3002\n   - **CDN Domain**\uff1a\u81ea\u5b9a\u4e49 CDN \u52a0\u901f\u57df\u540d\uff0c\u9700\u5305\u542b\u534f\u8bae\u5934\uff0c\u4f8b\u5982 ``https://cdn.example.com``\u3002\n   - **\u5b58\u50a8\u6839\u76ee\u5f55**\uff1a\u56fe\u7247\u5b58\u50a8\u5728\u5b58\u50a8\u6876\u5185\u7684\u8def\u5f84\uff08\u975e\u5b58\u50a8\u6876\u540d\u79f0\uff09\u3002\n\n\u542f\u7528\u5b58\u50a8\u540e\u7aef\n^^^^^^^^^^^^^\n\n1. \u5728 **\u7ad9\u70b9\u7ba1\u7406 > \u7f51\u7ad9\u8bbe\u7f6e > \u4e0a\u4f20\u533a\u57df** \u9875\u9762\u3002\n2. \u8bbe\u7f6e\u5b58\u50a8\u540e\u7aef\u4e3a ``up2minio``\u3002\n3. \u4fdd\u5b58\u8bbe\u7f6e\u540e\uff0c\u6240\u6709\u4e0a\u4f20\u7684\u56fe\u7247\u5c06\u5b58\u50a8\u5230 Minio\u3002\n\n---\n\n\u529f\u80fd\u7279\u70b9\n--------\n\n1. **\u6269\u5c55\u6027**\uff1a\u57fa\u4e8e Sapic \u7684\u94a9\u5b50\u67b6\u6784\uff0c\u53ef\u65e0\u7f1d\u96c6\u6210\u3002\n2. **\u652f\u6301\u81ea\u5b9a\u4e49 CDN**\uff1a\u901a\u8fc7\u914d\u7f6e CDN \u57df\u540d\u4f18\u5316\u8bbf\u95ee\u901f\u5ea6\u3002\n3. **\u5b58\u50a8\u8def\u5f84\u7075\u6d3b**\uff1a\u652f\u6301\u81ea\u5b9a\u4e49 Minio \u5b58\u50a8\u6839\u76ee\u5f55\u3002\n4. **\u5b89\u5168\u6027**\uff1a\u901a\u8fc7 AK/SK \u9a8c\u8bc1\u8bbf\u95ee\uff0c\u786e\u4fdd\u6570\u636e\u5b89\u5168\u3002\n\n---\n\nAPI \u65b9\u6cd5\n--------\n\n``get_bucket_obj()``\n^^^^^^^^^^^^^^^^^^^^\n\u8fd4\u56de Minio \u5ba2\u6237\u7aef\u5bf9\u8c61\u3002\n\n- **\u7528\u9014**\uff1a\u521d\u59cb\u5316 Minio \u5ba2\u6237\u7aef\u3002\n\n``upimg_save(**kwargs)``\n^^^^^^^^^^^^^^^^^^^^^^^^\n\u4e0a\u4f20\u56fe\u7247\u5230 Minio\u3002\n\n- **\u53c2\u6570**\uff1a\n  - ``filename``\uff1a\u56fe\u7247\u6587\u4ef6\u540d\u3002\n  - ``stream``\uff1a\u56fe\u7247\u6587\u4ef6\u6d41\u3002\n  - ``upload_path``\uff1a\u4e0a\u4f20\u8def\u5f84\u3002\n- **\u8fd4\u56de**\uff1a\u5b57\u5178\uff0c\u5305\u542b\u4e0a\u4f20\u7ed3\u679c\uff08``src`` \u4e3a\u56fe\u7247\u7684\u5b8c\u6574 URL\uff09\u3002\n\n``upimg_delete(sha, upload_path, filename, basedir, save_result)``\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\u5220\u9664\u5b58\u50a8\u5728 Minio \u4e2d\u7684\u56fe\u7247\u3002\n\n- **\u53c2\u6570**\uff1a\n  - ``sha``\uff1a\u56fe\u7247\u7684\u54c8\u5e0c\u503c\u3002\n  - ``upload_path``\uff1a\u4e0a\u4f20\u8def\u5f84\u3002\n  - ``filename``\uff1a\u56fe\u7247\u6587\u4ef6\u540d\u3002\n  - ``basedir``\uff1a\u5b58\u50a8\u6839\u76ee\u5f55\u3002\n  - ``save_result``\uff1a\u4fdd\u5b58\u65f6\u7684\u7ed3\u679c\u3002\n- **\u8fd4\u56de**\uff1a\u65e0\u3002\n\n---\n\n\u6ce8\u610f\u4e8b\u9879\n--------\n\n1. **HTTPS \u9650\u5236**\uff1a\u76ee\u524d\u4ec5\u652f\u6301 HTTPS\uff0c\u82e5 Minio \u4e0d\u652f\u6301 HTTPS\uff0c\u8bf7\u4f7f\u7528 Nginx \u914d\u7f6e\u53cd\u5411\u4ee3\u7406\u89e3\u51b3\u3002\n2. **\u5b58\u50a8\u6876\u6743\u9650**\uff1a\u5b58\u50a8\u6876\u9700\u8bbe\u7f6e\u4e3a\u516c\u5f00\u53ef\u8bfb\uff0c\u4ee5\u4fbf\u56fe\u7247\u80fd\u88ab\u5916\u90e8\u8bbf\u95ee\u3002\n3. **\u8def\u5f84\u914d\u7f6e**\uff1a\n   - **Bucket** \u548c **\u5b58\u50a8\u6839\u76ee\u5f55** \u914d\u7f6e\u6b63\u786e\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u6587\u4ef6\u5b58\u50a8\u5931\u8d25\u3002\n4. **CDN \u914d\u7f6e**\uff1a\u82e5\u672a\u914d\u7f6e CDN \u57df\u540d\uff0c\u5c06\u76f4\u63a5\u4f7f\u7528 Minio Endpoint \u5730\u5740\u3002\n\n---\n\n\u793a\u4f8b\u914d\u7f6e\n--------\n\n- **Bucket**: ``my-images``\n- **Region**: ``us-east-1``\n- **AccessKey**: ``your-access-key``\n- **SecretKey**: ``your-secret-key``\n- **Endpoint**: ``minio.example.com:9000``\n- **CDN Domain**: ``https://cdn.example.com``\n- **\u5b58\u50a8\u6839\u76ee\u5f55**: ``uploads/images``\n\n---\n\n\u8bb8\u53ef\u8bc1\n------\n\n\u672c\u9879\u76ee\u57fa\u4e8e `Apache 2.0 \u8bb8\u53ef\u8bc1 <https://www.apache.org/licenses/LICENSE-2.0>`_ \u53d1\u5e03\uff0c\u7528\u6237\u53ef\u81ea\u7531\u4f7f\u7528\u3001\u4fee\u6539\u548c\u5206\u53d1\uff0c\u4f46\u9700\u4fdd\u7559\u539f\u59cb\u7248\u6743\u58f0\u660e\u53ca\u8bb8\u53ef\u8bc1\u4fe1\u606f\u3002\n\n---\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "\u5c06\u56fe\u7247\u4e0a\u4f20\u81f3 Minio \u7684\u6269\u5c55\u6a21\u5757",
    "version": "0.0.1",
    "project_urls": {
        "Homepage": "https://www.dfql.io"
    },
    "split_keywords": [
        "sapic",
        "minio",
        "storage",
        "hook"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aa87b75e08559a345aa9c33cdb61c46613f85a67c0984f377d4a35236ae1b820",
                "md5": "59aa037a9af552a4b30602a56a244fd1",
                "sha256": "7ab374bc7d1fcc84b064af5d7d37abb9a2c2e2712a16a4ec01b53a94fb228ab4"
            },
            "downloads": -1,
            "filename": "up2minio-0.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "59aa037a9af552a4b30602a56a244fd1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 9161,
            "upload_time": "2024-11-23T02:14:04",
            "upload_time_iso_8601": "2024-11-23T02:14:04.474661Z",
            "url": "https://files.pythonhosted.org/packages/aa/87/b75e08559a345aa9c33cdb61c46613f85a67c0984f377d4a35236ae1b820/up2minio-0.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5abf694c3d5f6b1fda570aa0888c08c5ad0954fd33ec30e3718ce9dde648ee62",
                "md5": "7db3de14e5413ca7d5ebc6b4617db528",
                "sha256": "0911256ccfa1b9f348ff60e51d134404ff4e6ee9d2af37b1de3fafc7998b463d"
            },
            "downloads": -1,
            "filename": "up2minio-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "7db3de14e5413ca7d5ebc6b4617db528",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 9407,
            "upload_time": "2024-11-23T02:14:05",
            "upload_time_iso_8601": "2024-11-23T02:14:05.824107Z",
            "url": "https://files.pythonhosted.org/packages/5a/bf/694c3d5f6b1fda570aa0888c08c5ad0954fd33ec30e3718ce9dde648ee62/up2minio-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-23 02:14:05",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "up2minio"
}
        
Elapsed time: 0.63035s