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

求助:Python上传本地最新视频至Dropbox的代码异常问题

嘿,我来帮你搞定这两个Dropbox上传的问题,这俩坑我之前也踩过,给你梳理下解决方案:

问题1:上传的视频损坏无法播放

这个问题90%的概率是文件读取模式不对导致的——视频是二进制文件,如果用文本模式('r')读取再上传,会破坏文件的二进制结构,导致Dropbox上的文件损坏。

解决办法很简单:读取本地视频文件时一定要用二进制读取模式('rb'),并且在Dropbox SDK的files_upload方法里正确传递二进制内容。

举个测试用的代码示例:

import dropbox
import os

# 初始化Dropbox客户端
dbx = dropbox.Dropbox("你的访问令牌")

# 本地视频文件路径
local_video_path = "/path/to/your/latest/video.mp4"

# 以二进制模式读取文件
with open(local_video_path, 'rb') as f:
    file_content = f.read()

# 先上传一个临时文件测试能否播放
try:
    dbx.files_upload(file_content, "/temp_test_video.mp4")
    print("文件上传成功!")
except Exception as e:
    print(f"上传出错:{e}")

你可以先跑这段代码,看看Dropbox上的temp_test_video.mp4能不能正常播放——如果可以,就说明是读取模式的问题,接下来处理文件名的问题。

问题2:保留带时间戳的原文件名

文件名被自动重命名,通常是因为你在调用files_upload时,手动指定了新的远程文件名,或者不小心用了其他生成的名称。要保留原文件名,只需要把本地文件的原始文件名直接作为Dropbox的远程路径即可。

结合两个问题的完整解决方案代码:

import dropbox
import os
from pathlib import Path

def upload_latest_video_to_dropbox(local_folder, access_token):
    dbx = dropbox.Dropbox(access_token)
    
    # 获取文件夹里的所有视频文件(可根据自己的格式调整后缀)
    video_files = [f for f in Path(local_folder).iterdir() if f.suffix.lower() in ('.mp4', '.mov', '.avi')]
    
    # 按修改时间排序,取最新的视频文件
    latest_video = max(video_files, key=lambda x: x.stat().st_mtime)
    original_filename = latest_video.name  # 直接获取带时间戳的原文件名
    
    # 二进制读取并上传,远程路径直接用原文件名
    with open(latest_video, 'rb') as f:
        try:
            # 用WriteMode.add会在文件名重复时自动加后缀;用overwrite则覆盖同名文件
            dbx.files_upload(
                f.read(),
                f"/{original_filename}",
                mode=dropbox.files.WriteMode("add")
            )
            print(f"成功上传最新视频:{original_filename}")
        except dropbox.exceptions.ApiError as e:
            print(f"API错误:{e}")

# 调用示例
if __name__ == "__main__":
    YOUR_LOCAL_FOLDER = "/path/to/your/video/folder"
    YOUR_DROPBOX_TOKEN = "你的Dropbox访问令牌"
    upload_latest_video_to_dropbox(YOUR_LOCAL_FOLDER, YOUR_DROPBOX_TOKEN)

这里的核心是original_filename = latest_video.name直接获取本地原文件名,然后把远程路径设为f"/{original_filename}",这样Dropbox上的文件名就和本地完全一致了。另外如果需要覆盖同名文件,把WriteMode("add")改成WriteMode("overwrite")就行。

最后再确认下:确保你用的是官方dropbox Python库(可以用pip install dropbox安装),并且你的访问令牌有足够的文件写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:27:52