以编程方式从共享 Dropbox 文件夹链接下载内容

Posted

技术标签:

【中文标题】以编程方式从共享 Dropbox 文件夹链接下载内容【英文标题】:Programmatically Download Content from Shared Dropbox Folder Links 【发布时间】:2013-12-12 04:49:20 【问题描述】:

我正在构建一个应用程序来自动触发下载与用户共享的 Dropbox 文件(共享文件/文件夹链接)。正如here 所述,这对于 Dropbox 文件链接的实现非常简单。

不幸的是,这不适用于共享文件夹。任何人都对我如何可以提出建议

下载它的所有内容(也许可以获取其中要下载的文件链接列表?) 下载文件夹的 zip 文件

目前我可以转到 url 并进行一些屏幕抓取以尝试获取内容列表,但链接的 Dropbox 博客条目中描述的文件解决方案的优点是不需要抓取,所以它更多可靠和高效。

【问题讨论】:

标准 FTP 库在这种情况下不起作用,比如 paramiko? 这仅适用于 Dropbox 共享链接。更新了第一行以使其更清晰。 【参考方案1】:

这确实应该通过使用awesome Dropbox Core API 来完成,它允许您upload 或download files,查看file deltas 上的信息和shared folders/files 上的信息。

API 相当简单,因为它返回一个通用 URL,可以从 Dropbox 帐户下载任何项目。

【讨论】:

如何通过 Core API 来完成?问题是从发送给用户的链接下载文件夹。通过 Dropbox Core API 执行此操作需要 Oauth 访问每个向用户发送文件的人的帐户? 是的,它要求每个用户允许您的应用程序代表他们登录,但是,您的应用程序可以更直接地访问所有内容。否则,您没有很好地解释您的问题,无法得到不同的答案。 关于从链接下载文件的 Dropbox 博客链接用 Dropbox 的话准确地说明了这种情况 - 但问题在于为文件夹提供相同的功能,如问题中所述。【参考方案2】:

Dropbox 的支持团队刚刚向我介绍了执行此操作的最佳方式:

只需将?dl=1 添加到共享链接的末尾即可。这将为您提供共享文件夹的压缩版本。

因此,如果与用户共享的链接是 https://www.dropbox.com/sh/xyz/xyz-YZ(或类似链接,链接到共享文件夹),要下载该文件夹的压缩版本,只需访问 https://www.dropbox.com/sh/xyz/xyz-YZ?dl=1

希望这对其他人也有帮助。

【讨论】:

不过似乎不适用于大于 2 Gb 的文件夹 - 生成的文件已损坏。 实际上,如果结果大小超过 1GB,您将收到 500 错误 如果更改文件夹名称,如何知道共享网址?也许可以使用access_token 以某种方式对其进行加密? @Cian @EdgarsŠturms 我不确定 - 我认为您需要再次请求共享 URL。这种下载方式假定您拥有正确的共享 URL。 @Cian 找到了我的问题的答案***.com【参考方案3】:

当通过 python 下载文件的直接共享链接时,我得到的是 html 页面而不是实际的文件内容。更改 ?dl=1 没有帮助。然后我注意到 wget 正在下载实际文件,即使在?dl=0 时也是如此。似乎 dropbox 检测到 wget 用户代理并使用文件进行响应,因此在 python 中将用户代理标头设置为 Wget/1.16 (linux-gnu) 解决了这个问题,现在任何 Dropbox 共享链接都可以正确下载:

headers = 'user-agent': 'Wget/1.16 (linux-gnu)'
r = requests.get(url, stream=True, headers=headers)
with open(filepath, 'wb') as f:
    for chunk in r.iter_content(chunk_size=1024): 
        if chunk:
            f.write(chunk)

【讨论】:

以上是关于以编程方式从共享 Dropbox 文件夹链接下载内容的主要内容,如果未能解决你的问题,请参考以下文章

使用 cURL 下载受密码保护的 Dropbox 链接

以编程方式下载 Azure 文件共享文档

通过 wget 从 Dropbox 链接下载包含子文件夹的文件夹到 Unix 服务器

国外的dropbox邮件链接为什么一开始会

如何使用 Dropbox python API 获取文件的共享 URL?

使用 Dropbox API 列出 Dropbox 的所有文件夹和文件