如标题所示,我可以访问共享文件夹,其中上传了一些文件。我只想下载一个名为“db.dta”的特定文件。所以,我有这个脚本:
def download_file(url, filename):
url = url
file_name = filename
with open(file_name, "wb") as f:
print("Downloading %s" % file_name)
response = requests.get(url, stream=True)
total_length = response.headers.get('content-length')
if total_length is None: # no content length header
f.write(response.content)
else:
dl = 0
total_length = int(total_length)
for data in response.iter_content(chunk_size=4096):
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) )
sys.stdout.flush()
print(" ")
print('Descarga existosa.')
如果我将 dl=0 修改为 1,它实际上会下载文件的共享链接,如下所示:
https://www.dropbox.com/s/ajklhfalsdfl/db_test.dta?dl=1
问题是,我在这个共享文件夹中没有这个特定文件的共享链接,所以如果我使用文件预览的 url,我会收到拒绝访问的错误(即使我将 dl=0 更改为 1)。
https://www.dropbox.com/sh/a630ksuyrtw33yo/LKExc-MKDKIIWJMLKFJ?dl=1&preview=db.dta
给出的错误:
dropbox.exceptions.ApiError: ApiError('22eaf5ee05614d2d9726b948f59a9ec7', GetSharedLinkFileError('shared_link_access_denied', None))
有办法下载这个文件吗?
如果您有父文件夹的共享链接,而不是所需的特定文件,则可以使用 /2/sharing/get_shared_link_file 端点 仅下载特定文件。
在 Dropbox API v2 Python SDK 中,这就是
sharing_get_shared_link_file
方法(或 sharing_get_shared_link_file_to_file
)。根据您共享的错误输出,您似乎已经在使用它(尽管不在您发布的特定代码片段中)。
使用它看起来像这样:
import dropbox
dbx = dropbox.Dropbox(ACCESS_TOKEN)
folder_shared_link = "https://www.dropbox.com/sh/a630ksuyrtw33yo/LKExc-MKDKIIWJMLKFJ"
file_relative_path = "/db.dat"
res = dbx.sharing_get_shared_link_file(url=folder_shared_link, path=file_relative_path)
print("Metadata: %s" % res[0])
print("File data: %s bytes" % len(res[1].content))
(您在问题中提到了“db.dat”和“db.dta”。确保您使用实际正确的那个。)
此外,请注意,如果您使用的是通过“应用程序文件夹”访问类型注册的 Dropbox API 应用程序:当前存在一个错误,当将此方法与应用程序文件夹应用程序的访问令牌一起使用时,可能会导致此
shared_link_access_denied
错误。
更新:当对具有应用程序文件夹访问类型的应用程序使用访问令牌时,/2/sharing/get_shared_link_metadata 和 /2/sharing/get_shared_link_file 端点(以及 SDK 中的相应方法)现在应该可以工作。