Загрузка изображений из общедоступной папки в Dropbox - PullRequest
2 голосов
/ 05 мая 2020

Я получил ссылку на общую папку от компании, занимающейся электронной коммерцией. Ссылка - publi c и не передается напрямую в мою учетную запись Dropbox.

Как мне получить URL-адрес изображения, которое я могу передать либо DownloadAsyn c методу того же sdk, либо просто HttpClient и хорошо ... скачать его?

В идеале это было бы быть той же ссылкой, которую я получаю, когда нажимаю на изображение при просмотре этой общей папки в браузере.

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

}

1 Ответ

2 голосов
/ 05 мая 2020

Использование метода GetSharedLinkFileAsync - правильный способ программной загрузки файла по общей ссылке. Фактически он предоставляет как метаданные (в link.Response в вашем коде, как вы упомянули), так и данные файла напрямую (не через URL-адрес).

Для доступа к данным файла вы можете использовать любой методов GetContentAs..., задокументированных в IDownloadResponse, возвращенных GetSharedLinkFileAsync. В вашем коде это будет выглядеть примерно так: link.GetContentAsStreamAsync() (или как вам угодно).

В качестве альтернативы, если вы хотите загрузить всю папку по общей ссылке, вы можете использовать URL параметры, задокументированные в этой статье справочного центра . (Однако для очень больших папок это может не сработать.)

...