python - 有没有办法使用 Dropbox API 下载文件而不使用网络服务器带宽?

标签 python django download dropbox dropbox-api

我是 python/Django 和 Dropbox-API 编程的新手。我搜索了又搜索,但没有找到答案。

我正在使用 Python-Django,并且我的 Dropbox 应用程序已被授权访问 Dropbox 用户的帐户。我有访问所需的 token ,可以运行 python 脚本来下载目标文件,但它仅将其保存到我正在运行它的 Web 服务器上。

我正在尝试获取它,以便文件可以通过网络浏览器直接下载给用户,而不是使用我的网络服务器连接到 Dropbox 并获取文件。

有没有办法使用 Dropbox API 下载文件而不使用网络服务器带宽?我认为我应该使用 Dropbox REST API,但我不知道如何正确创建 Web URL 以便它有权获取文件。我有我的应用程序的用户公钥/私钥,但不知道如何生成 URL 以使其使用它。

任何我可以从中学习的建议或信息链接将不胜感激。

import re
import base64
from datetime import datetime, timedelta
from dateutil import parser
from django.contrib import admin
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
from dropbox import client, rest, session

dropboxPath = '/Photos/Kids.jpg'
localPath = '~/Downloads' # This path is generated through a jQuery Dialog and stored in session variable

def getAPI(userPublicKey, userPrivateKey):
    connection = session.DropboxSession(AppPublicKey, AppPrivateKey, AccessType)
    connection.set_token(userPublicKey, userPrivateKey)
    dropbox = client.DropboxClient(connection)
    api = dropbox
    return api


def fileDownload(request, api, dropboxPath, localPath):
    # Connect to dropbox with user keys
    api = getAPI(userPublicKey, userPrivateKey)

    # Download target file
    path_source = dropboxPath
    path_target = localPath

    # ISSUE SECTION
    # --------------------
    # This section will download the file from the user's dropbox,
    # but it downloads to my web server first (memory or file).
    # I want this to go directly to the user via browser download vs. going through
    # my server.

    f, metadata = api.get_file_and_metadata(path_source)
    out = open(path_target, 'w')
    out.write(f.read())
    out.close()
    print metadata

    return HttpResponseRedirect('/download/complete')

最佳答案

您可以通过 /media endpoint 获取文件内容的直接 URL并将用户重定向到该位置。这样用户就可以直接从 Dropbox 的服务器下载文件。

在 Python 中,这看起来像这样:

return HttpResponseRedirect(api.media(path_source)['url'])

关于python - 有没有办法使用 Dropbox API 下载文件而不使用网络服务器带宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18926888/

相关文章:

PHP上传文件继承权限错误使用Windows IIS Server

node.js - 如何使用 NodeJs (https) 从 github.com 下载文件

php - php适合视频等大文件上传吗

python - DetailView 方法的参数和 pk_url_kwarg 的用法

http - 使用GZIP压缩下载文件时出现"Content decoding has failed"错误

python - 在 Django 中将 HTML 放入 ValidationError

python - 如何针对自定义值列表订购 Django 查询?

python - 使用 Python 生成 SaS token

python - 获取字符串中数值列表的最简洁方法

python - urllib3 中没有默认密码属性?