以编程方式从共享 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 文件夹链接下载内容的主要内容,如果未能解决你的问题,请参考以下文章
通过 wget 从 Dropbox 链接下载包含子文件夹的文件夹到 Unix 服务器