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

如何从Django上传文件至Dropbox?附代码及报错信息

Django向Dropbox上传文件的正确实现方法

当然可以通过代码实现从Django向Dropbox上传文件,你当前的报错是因为对Dropbox API的使用方式有误,下面是问题分析和解决方案:

报错原因

你遇到的TypeError: expected request_binary as binary type, got <class 'str'>,核心问题有两个:

  1. dbx.files_upload()方法的第一个参数要求传入文件的二进制内容,但你传的是文件夹路径字符串;
  2. files_upload()是用来上传单个文件的API,无法直接上传整个文件夹。

正确实现代码

下面是遍历本地文件夹(包括子文件夹)并将所有文件上传到Dropbox的完整代码:

import os
import dropbox
from django.conf import settings
from django.http import HttpResponse

# 替换为你的Dropbox访问令牌
DROPBOX_TOKEN = "xxxxxxx"
# 本地要上传的文件夹路径
LOCAL_UPLOAD_FOLDER = os.path.join(settings.BASE_DIR, 'dcfiles')
# Dropbox上的目标根路径,确保结尾有正斜杠
DROPBOX_TARGET_ROOT = "/Apps/backup/"

def upload_local_folder_to_dropbox(local_folder, dropbox_root_path):
    # 初始化Dropbox客户端
    dbx = dropbox.Dropbox(DROPBOX_TOKEN)
    
    # 遍历本地文件夹的所有文件(包括子文件夹)
    for root, _, files in os.walk(local_folder):
        for file_name in files:
            # 拼接本地文件的完整路径
            local_file_path = os.path.join(root, file_name)
            # 计算当前文件相对于本地根文件夹的路径,保持目录结构
            relative_path = os.path.relpath(local_file_path, local_folder)
            # 拼接Dropbox上的目标文件路径,统一用正斜杠
            dropbox_target_path = os.path.join(dropbox_root_path, relative_path).replace("\\", "/")
            
            # 以二进制模式读取文件内容
            with open(local_file_path, 'rb') as file_obj:
                file_content = file_obj.read()
            
            # 上传文件,设置覆盖模式(如果目标已有同名文件则替换)
            dbx.files_upload(
                file_content,
                dropbox_target_path,
                mode=dropbox.files.WriteMode.overwrite
            )

# 在你的Django视图中调用该函数
def strequest(request):
    # 这里可以添加你的视图逻辑
    upload_local_folder_to_dropbox(LOCAL_UPLOAD_FOLDER, DROPBOX_TARGET_ROOT)
    # 后续逻辑,比如返回响应
    return HttpResponse("文件上传完成")

关键注意事项

  • 确保已经安装了Dropbox SDK:执行pip install dropbox
  • 你的Dropbox令牌需要有文件写入权限,建议在Dropbox开发者后台生成专用的应用令牌
  • 如果上传大文件(超过150MB),建议使用Dropbox的分块上传API(files_upload_session_start等方法),避免内存占用过高
  • 代码中处理了Windows系统的路径分隔符问题,确保Dropbox路径统一使用正斜杠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:00:58