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

时间:2013-09-20 22:39:25

标签: python django download dropbox dropbox-api

我是python / Django和Dropbox-API编程的新手。我搜索并搜索但未能找到答案。

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

我正试图通过网络浏览器将文件直接下载到用户,而不是使用我的网络服务器连接到Dropbox并获取文件。

有没有办法使用Dropbox API下载文件而不使用Web服务器带宽?我想我应该使用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')

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

也许你想要Dropbox选择器:https://www.dropbox.com/developers/dropins