从 Dropbox 上的公开共享文件夹下载图像
Downloading images from publicly shared folder on Dropbox
我收到了一个 link 到电子商务公司的共享文件夹。 link 是 public 并且没有直接与我的保管箱帐户共享。
我如何获取图像的 url,我可以将其传递给同一 sdk 的 DownloadAsync 方法或简单地传递给 HttpClient 并...下载它?
理想情况下,它与我在浏览器中查看该共享文件夹时单击图像时得到的结果相同 link。
https://www.dropbox.com/sh/{folder_hash}/{file_hash_maybe}/{filename}?dl=0
这是我试过的:
using Dropbox.Api;
using Dropbox.Api.Files;
...
var accessToken = "abracadabra";
var sharedFolderUrl = "https://www.dropbox.com/sh/{folder_hash}?dl=0";
using (var dbx = new DropboxClient(accessToken))
{
var sharedLink = new SharedLink(sharedFolderUrl);
var sharedFiles = await dbx.Files.ListFolderAsync(path: "", sharedLink: sharedLink);
// sharedFiles - has over 13,000 entries, I use cursor to get them all.
foreach (var file in sharedFiles.Entries)
{
if (file.IsFile)
{
// tried this, but:
// 1. it's crazy to loop through all
// 2. link.Response.Url gives me the same url to a shared folder for all items
var link = await dbx.Sharing.GetSharedLinkFileAsync(url: sharedFolderUrl, path: "/" + file.Name);
}
}
}
使用 GetSharedLinkFileAsync
方法是以编程方式从共享 link 下载文件的正确方法。它实际上同时提供元数据(在您提到的代码中的 link.Response
中)以及直接提供文件数据(而不是通过 URL)。
要访问文件数据,您可以使用 IDownloadResponse
as returned by GetSharedLinkFileAsync
下记录的任何 GetContentAs...
方法。在您的代码中,它看起来像:link.GetContentAsStreamAsync()
(或您想要的任何一个)。
或者,如果您想从共享 link 下载整个文件夹,您可以使用 the URL parameters documented in this help center article。 (不过,对于非常大的文件夹,这可能会失败。)
我收到了一个 link 到电子商务公司的共享文件夹。 link 是 public 并且没有直接与我的保管箱帐户共享。
我如何获取图像的 url,我可以将其传递给同一 sdk 的 DownloadAsync 方法或简单地传递给 HttpClient 并...下载它?
理想情况下,它与我在浏览器中查看该共享文件夹时单击图像时得到的结果相同 link。
https://www.dropbox.com/sh/{folder_hash}/{file_hash_maybe}/{filename}?dl=0
这是我试过的:
using Dropbox.Api;
using Dropbox.Api.Files;
...
var accessToken = "abracadabra";
var sharedFolderUrl = "https://www.dropbox.com/sh/{folder_hash}?dl=0";
using (var dbx = new DropboxClient(accessToken))
{
var sharedLink = new SharedLink(sharedFolderUrl);
var sharedFiles = await dbx.Files.ListFolderAsync(path: "", sharedLink: sharedLink);
// sharedFiles - has over 13,000 entries, I use cursor to get them all.
foreach (var file in sharedFiles.Entries)
{
if (file.IsFile)
{
// tried this, but:
// 1. it's crazy to loop through all
// 2. link.Response.Url gives me the same url to a shared folder for all items
var link = await dbx.Sharing.GetSharedLinkFileAsync(url: sharedFolderUrl, path: "/" + file.Name);
}
}
}
使用 GetSharedLinkFileAsync
方法是以编程方式从共享 link 下载文件的正确方法。它实际上同时提供元数据(在您提到的代码中的 link.Response
中)以及直接提供文件数据(而不是通过 URL)。
要访问文件数据,您可以使用 IDownloadResponse
as returned by GetSharedLinkFileAsync
下记录的任何 GetContentAs...
方法。在您的代码中,它看起来像:link.GetContentAsStreamAsync()
(或您想要的任何一个)。
或者,如果您想从共享 link 下载整个文件夹,您可以使用 the URL parameters documented in this help center article。 (不过,对于非常大的文件夹,这可能会失败。)