从Dropbox上的公共共享文件夹下载图像

问题描述 投票:1回答:1

我从电子商务公司收到指向共享文件夹的链接。该链接是公开的,没有直接与我的保管箱帐户共享。

如何获得可传递给相同sdk的DownloadAsync方法或仅HttpClient的图像的URL,好吧……下载它?

理想情况下,当我在浏览器中查看共享文件夹时,单击图像时,将获得相同的链接。

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);
        }
    }        

}
c# dropbox dropbox-api dropbox-sdk
1个回答
1
投票

使用GetSharedLinkFileAsync方法是从共享链接以编程方式下载文件的正确方法。实际上,它既提供元数据(如您提到的那样在代码的link.Response中),也直接提供文件数据(不通过URL)。

要访问文件数据,可以使用GetContentAs...返回的IDownloadResponse下记录的任何IDownloadResponse方法。在您的代码中,该代码类似于:GetSharedLinkFileAsync(或您想要的任何一个)。

或者,如果要从共享链接下载整个文件夹,则可以使用GetSharedLinkFileAsync。 (对于大型文件夹,这可能会失败。)

© www.soinside.com 2019 - 2024. All rights reserved.