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

如何将wget下载的视频直接上传至Dropbox,无需本地存储?

实现流式下载并直接上传至Dropbox(避免本地存储)

你没法直接用wget.download()指定Dropbox路径,因为wget模块是针对本地文件系统设计的。要实现边下载边上传、不存完整文件到本地的需求,得用流式处理+Dropbox分块上传的方案,具体步骤如下:

核心思路

  1. 用requests库流式获取视频内容(代替wget),无需一次性把整个视频加载到内存或存到本地。
  2. 用Dropbox Python SDK的文件上传会话功能,把下载到的分块数据直接上传到Dropbox,全程仅保留小块数据在内存中。

代码实现

先安装依赖:

pip install requests dropbox

完整代码示例:

import requests
import dropbox

# 配置参数
DROPBOX_ACCESS_TOKEN = "你的Dropbox访问令牌"
VIDEO_URL = "目标视频的下载链接"
DROPBOX_TARGET_PATH = "/Dropbox目标路径/视频文件名.mp4"  # 示例:"/videos/my_video.mp4"
CHUNK_SIZE = 4 * 1024 * 1024  # 4MB,Dropbox要求分块至少4MB(最后一块除外)

def stream_upload_to_dropbox():
    # 初始化Dropbox客户端
    dbx = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN)
    
    # 流式获取视频内容
    with requests.get(VIDEO_URL, stream=True) as r:
        r.raise_for_status()
        
        # 启动上传会话
        session_start_result = dbx.files_upload_session_start(r.raw.read(CHUNK_SIZE))
        session_id = session_start_result.session_id
        cursor = dropbox.files.UploadSessionCursor(session_id=session_id, offset=CHUNK_SIZE)
        commit = dropbox.files.CommitInfo(path=DROPBOX_TARGET_PATH)
        
        # 分块上传剩余内容
        while True:
            chunk = r.raw.read(CHUNK_SIZE)
            if not chunk:
                break
            if len(chunk) < CHUNK_SIZE:
                # 上传最后一块并完成会话
                dbx.files_upload_session_finish(chunk, cursor, commit)
            else:
                dbx.files_upload_session_append(chunk, cursor.session_id, cursor.offset)
                cursor.offset += len(chunk)

if __name__ == "__main__":
    stream_upload_to_dropbox()

关键说明

  • 流式下载:requests.get添加stream=True后,响应体不会一次性下载到内存,而是通过r.raw.read()逐块读取。
  • Dropbox分块上传:针对大文件,会话上传能避免网络问题导致整个上传失败,4MB是官方推荐的最小有效分块大小。
  • 参数替换:需将DROPBOX_ACCESS_TOKEN替换为你的有效令牌(在Dropbox开发者控制台创建应用获取),并修改VIDEO_URL和DROPBOX_TARGET_PATH为实际值。

小文件简化方案

如果视频文件小于150MB,可简化为一次性读取内容后直接上传:

import requests
import dropbox

dbx = dropbox.Dropbox("你的Dropbox访问令牌")
video_content = requests.get(VIDEO_URL).content
dbx.files_upload(video_content, "/目标路径/文件名.mp4")

但该方式不适合大文件,容易占用过多内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:39:22