You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
TOS路径预签名
生成TOS的普通预签名
复制全文
生成TOS的普通预签名

算子介绍

描述

TOS 预签名 URL 生成处理器

核心功能

  • 签名生成机制:基于火山引擎 TOS SDK 生成带时效性的预签名 URL
  • URL schema 处理:
    • 原生支持 tos/s3 协议路径的签名转换
    • 自动跳过包含 http/https 协议的路径
  • 安全控制:
    • 可配置签名有效期(默认 3600 秒)

输入输出规范

  • 输入格式:
    • TOS 路径:string 类型,支持以下格式:
      • tos://{bucket}/{object}
      • s3://{bucket}/{object}
  • 输出格式:
    • 有效签名 URL:https 协议字符串
    • 异常情况:返回 None

配置参数说明

  • expires: 控制签名有效期(单位:秒),过短可能导致业务中断,过长存在安全风险

Daft 调用

算子参数

输入

输入列名

说明

urls

输入的 TOS 文件路径

输出

生成的签名 URL

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

expires

int

3600

签名 URL 的过期时间,单位秒。默认值 3600

调用示例

下面的代码展示了如何使用 daft 运行算子,生成TOS的普通预签名。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.text.pre_sign_url_for_tos import PreSignUrlForTos
from daft.las.functions.udf import las_udf

if os.getenv("DAFT_RUNNER", "native") == "ray":
    import logging

    import ray

    def configure_logging():
        logging.basicConfig(
            level=logging.INFO,
            format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
            datefmt="%Y-%m-%d %H:%M:%S.%s".format(),
        )
        logging.getLogger("tracing.span").setLevel(logging.WARNING)
        logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
        logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
        logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
        logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

    ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
    daft.context.set_runner_ray()

daft.set_execution_config(actor_udf_ready_timeout=600)
daft.set_execution_config(min_cpu_per_task=0)

if __name__ == "__main__":
    # 样例数据
    TOS_TEST_DIR = os.getenv("TOS_TEST_DIR", "tos_bucket")
    samples = {"url": [f"tos://{TOS_TEST_DIR}/sample.mp4"]}

    # 使用提供的算子生成签名URL
    ds = daft.from_pydict(samples)
    ds = ds.with_column(
        "signed_url",
        las_udf(
            PreSignUrlForTos,
            construct_args={
                "expires": 3600,
            },
        )(col("url")),
    )

    ds.show()
    # 输出内容,以实际情况为准
    # ╭─────────────────────────────┬────────────────────────────────╮
    # │ url                         ┆ signed_url                     │
    # │ ---                         ┆ ---                            │
    # │ Utf8                        ┆ Utf8                           │
    # ╞═════════════════════════════╪════════════════════════════════╡
    # │ tos://tos_bucket/sample.mp4 ┆ https://tos_bucket.tos-cn-bei… │
    # ╰─────────────────────────────┴────────────────────────────────╯
最近更新时间:2026.01.08 19:14:24
这个页面对您有帮助吗?
有用
有用
无用
无用