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

已安装Box桌面端,如何获取本地目录新建文件的Box URL?

问题描述

我已安装Box桌面应用,本地Box文件夹路径为C:\Users\Thiago.Oliveira\Box\。我编写了如下Python脚本,可实现该文件夹内文件的复制与重命名:

# Providing the folder path
origin = r'C:\\Users\\Thiago.Oliveira\\Box\\XXXXXXX.xlsx'
target = f'C:\\Users\\Thiago.Oliveira\\Box\\XXXXXXX{datetime.date.today()}.xlsx'

# 复制文件
shutil.copy(origin, target)
print("Files are copied successfully")

但我还需要获取新建文件的Box URL,以便通过邮件发送。目前未找到可行方法,请问是否可以实现?

解决方案

可以实现,以下是两种实用方法:

方法一:读取本地文件的Box关联属性

Box桌面同步的文件会在Windows系统中存储专属扩展属性,包含Box文件ID,通过这个ID可直接构造文件URL:

import win32api
import win32con
import os
import shutil
import datetime

# 原脚本逻辑
origin = r'C:\Users\Thiago.Oliveira\Box\XXXXXXX.xlsx'
target = f'C:\\Users\\Thiago.Oliveira\\Box\\XXXXXXX{datetime.date.today()}.xlsx'
shutil.copy(origin, target)
print("Files are copied successfully")

# 获取Box URL的函数
def get_box_file_url(local_file_path):
    try:
        # 读取Box存储的文件ID属性
        file_attrs = win32api.GetFileAttributesEx(local_file_path, win32con.GetFileExInfoStandard)
        box_item_id = file_attrs[-1].get('BoxItemId')
        if box_item_id:
            return f"https://app.box.com/file/{box_item_id}"
    except Exception as e:
        print(f"读取属性失败: {str(e)}")
    return None

# 调用获取URL
box_url = get_box_file_url(target)
if box_url:
    print(f"Box文件URL:{box_url}")
else:
    print("无法获取URL,请等待文件完成同步到Box云端")

注意:需要先安装pywin32库(pip install pywin32),且必须等待文件完成同步后才能读取到有效属性。

方法二:使用Box Python SDK直接调用云端API

如果本地属性读取不稳定,可通过官方SDK直接从Box云端获取文件URL,步骤如下:

  1. 安装SDK:pip install boxsdk
  2. 在Box开发者控制台创建自定义应用,获取JWT认证所需的参数(客户端ID、密钥、企业ID、JWT密钥ID、私钥文件等)
  3. 编写代码:
import shutil
import datetime
from boxsdk import Client, JWTAuth

# 原脚本逻辑
origin = r'C:\Users\Thiago.Oliveira\Box\XXXXXXX.xlsx'
target = f'C:\\Users\\Thiago.Oliveira\\Box\\XXXXXXX{datetime.date.today()}.xlsx'
shutil.copy(origin, target)
print("Files are copied successfully")

# 初始化Box客户端(替换为你的应用参数)
auth = JWTAuth(
    client_id='你的客户端ID',
    client_secret='你的客户端密钥',
    enterprise_id='你的企业ID',
    jwt_key_id='你的JWT密钥ID',
    rsa_private_key_file_path='私钥文件路径.pem',
    rsa_private_key_passphrase='私钥密码(如果有)'
)
auth.authenticate_instance()
client = Client(auth)

# 根据本地路径查找云端文件并获取URL
def get_box_url_from_cloud(local_path):
    box_root_path = r'C:\Users\Thiago.Oliveira\Box'
    # 转换为Box云端的相对路径
    relative_path = os.path.relpath(local_path, box_root_path).replace('\\', '/')
    # 拆分路径为文件夹和文件名
    folder_path, file_name = os.path.split(relative_path)
    
    # 定位目标文件夹
    current_folder = client.folder(folder_id='0')  # Box根目录ID为0
    if folder_path:
        for part in folder_path.split('/'):
            items = current_folder.get_items()
            current_folder = next(item for item in items if item.name == part and item.type == 'folder')
    
    # 查找目标文件
    for item in current_folder.get_items():
        if item.name == file_name and item.type == 'file':
            # 获取可共享的URL
            return item.get_shared_link()['url']
    return None

# 调用获取URL
box_url = get_box_url_from_cloud(target)
if box_url:
    print(f"Box文件URL:{box_url}")
else:
    print("云端未找到对应文件,请确认同步完成或路径正确")

这种方法不受本地同步状态限制,直接从云端获取信息,但需要完成开发者应用的配置。

内容的提问来源于stack exchange,提问作者Thiago De Oliveira Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:21:31