You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Box Python SDK从共享链接批量下载文件?

使用Box Python SDK从共享链接下载全部文件

我懂你现在的需求:手里有一个Box共享位置的URL,想通过Python SDK把这个位置下的所有文件都下载下来,一开始翻SDK文档没找到对应的方法对吧?其实SDK里是有处理共享链接的能力的,只是需要用到get_shared_item这个关键接口先解析共享链接,拿到对应的文件夹对象,之后就能遍历下载了。

下面是完整的实现步骤和代码:

核心步骤说明

  • 完成OAuth2认证:和你之前的代码逻辑一致,先初始化OAuth2客户端和SDK的Client实例。
  • 解析共享链接:用client.get_shared_item()方法传入共享URL,获取到对应的文件夹对象。
  • 遍历文件夹内容:递归或循环处理文件夹里的所有文件(包括子文件夹内的文件,按需选择)。
  • 批量下载文件:对每个文件调用download_to()方法保存到本地路径。

完整代码示例

from boxsdk import Client, OAuth2
from boxsdk.object.folder import Folder
import os

def download_folder_contents(folder: Folder, save_path: str):
    """递归下载Box文件夹下的所有文件到本地指定路径"""
    # 分页获取文件夹内的所有项目(SDK自动处理分页逻辑)
    for item in folder.get_items(limit=100):
        if item.type == 'file':
            # 下载单个文件,保留原文件名
            print(f"正在下载: {item.name}")
            file_save_path = os.path.join(save_path, item.name)
            with open(file_save_path, 'wb') as local_file:
                item.download_to(local_file)
        elif item.type == 'folder':
            # 处理子文件夹:先创建本地目录,再递归下载
            sub_folder_path = os.path.join(save_path, item.name)
            os.makedirs(sub_folder_path, exist_ok=True)
            print(f"进入子文件夹: {item.name}")
            download_folder_contents(item, sub_folder_path)

if __name__ == "__main__":
    # 初始化OAuth2认证
    oauth = OAuth2(
        client_id='你的Client ID',
        client_secret='你的Client Secret',
        # 定义令牌存储回调,这里简单打印,实际可以保存到文件/数据库
        store_tokens=lambda access_token, refresh_token: 
            print(f"更新令牌: 访问令牌={access_token[:20]}..., 刷新令牌={refresh_token[:20]}..."),
        # 如果已有有效刷新令牌,可直接传入
        # refresh_token='你的刷新令牌'
    )
    
    # 创建Box客户端实例
    client = Client(oauth)
    
    # 替换为你的Box共享位置URL
    shared_link_url = "https://app.box.com/s/xxxxxxxxx"
    
    # 解析共享链接,获取对应的文件夹对象
    try:
        shared_folder = client.get_shared_item(shared_link_url)
        print(f"成功获取共享文件夹: {shared_folder.name}")
    except Exception as e:
        print(f"解析共享链接失败: {str(e)}")
        exit(1)
    
    # 本地保存根路径,会自动创建不存在的目录
    local_root_path = "./box_downloaded_files"
    os.makedirs(local_root_path, exist_ok=True)
    
    # 开始批量下载
    download_folder_contents(shared_folder, local_root_path)
    print("所有文件下载完成!")

关键细节提醒

  • get_shared_item方法:这是SDK专门用于处理共享链接的接口,不管是共享文件还是文件夹都能解析,返回对应的Item对象。
  • 令牌管理:store_tokens参数需要是一个回调函数,用来接收更新后的access_token和refresh_token,建议把这些令牌持久化存储,下次运行时直接传入refresh_token就能自动完成认证刷新。
  • 递归控制:如果不需要下载子文件夹,直接去掉递归逻辑,只处理当前文件夹下的文件即可。
  • 分页处理:folder.get_items(limit=100)每次最多获取100个项目,SDK会自动处理分页,不用担心文件过多导致的获取不全问题。

内容的提问来源于stack exchange,提问作者Munesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:32:00