Статьи

Как скачать файл из Dropbox с помощью оболочки Dropbox .NET

Пока что мы рассмотрели следующие темы в серии Dropbox:

После аутентификации вы можете делать запросы API, такие как запрос информации о вашей учетной записи, создание, удаление папок и т. Д. Одним из конкретных типов запросов является загрузка файла из вашей учетной записи Dropbox. После того, как вы прошли через предыдущие 3 части, это становится тривиально легко.

Если вы хотите продолжить, перейдите на страницу загрузки и загрузите код для третьей части (статья № 65). Разархивируйте его и откройте в Visual Studio.

Новый метод

Давайте добавим новый метод к типу DropboxApi, который называется DownloadFile (…).

public FileSystemInfo DownloadFile(string root, string path)
{
    // ...
}

Требуется два параметра, а именно:

  • root : корень, относительно которого указан путь. Допустимые значения: песочница и дропбокс.
  • путь : путь к файлу, который вы хотите скачать.

Он возвращает экземпляр типа FileSystemInfo , который мы создали ранее в части # 3. Тип FileSystemInfo содержит метаданные файла.

Пример использования нового метода:

var api = new DropboxApi(ConsumerKey, ConsumerSecret, accessToken);
var file = api.DownloadFile("dropbox", "Public/DropboxPart3.zip");
file.Save(@"C:\DropboxPart3.zip");

Верх страницы

Расширение FileSystemInfo

Прежде чем мы сможем продолжить, нам нужно изменить существующий тип FileSystemInfo.

public class FileSystemInfo
{
    //...

    public byte[] Data { get; internal set; }

    public void Save(string path)
    {
        using (var fileStream = new FileStream(
            path, FileMode.Create, FileAccess.ReadWrite))
        {
            fileStream.Write(Data, 0, Data.Length);
        }
    }
}

Новое свойство Data возвращает байтовый массив, который содержит содержимое загруженного нами файла. Метод Save (…) позволяет легко сохранить файл. Здесь нет мировых шокирующих новостей.

Верх страницы

Скачивание файла

Давайте реализуем метод DownloadFile (…). При загрузке файла нам нужно связаться с сервером контента API. Итак, давайте добавим URL к типу DropboxRestApi.

public class DropboxRestApi
{
    public const string ApiVersion = "1";

    public const string ApiContentServer =
        "https://api-content.dropbox.com/" + ApiVersion + "/";

    //...
}

Теперь мы можем начать с реализации метода DownloadFile (…). Сначала нам нужно составить URL для файла, который мы хотим получить.

Например:

https://api-content.dropbox.com/1/files?root=dropbox&path=Public/DropboxPart3.zip

var uri = new Uri(new Uri(DropboxRestApi.ApiContentServer),
    String.Format("files?root={0}&path={1}",
    root, UpperCaseUrlEncode(path)));

Примечание . В прошлый раз мы создали метод UpperCaseUrlEncode (…), чтобы обойти довольно неприятную проблему при кодировании пути URL.

Далее нам нужно подписать запрос.

var oauth = new OAuth();
var requestUri = oauth.SignRequest(uri, _consumerKey, _consumerSecret,
    _accessToken);

Затем вы можете, наконец, выполнить запрос GET для загрузки файла.

var request = (HttpWebRequest) WebRequest.Create(requestUri);
request.Method = WebRequestMethods.Http.Get;
var response = request.GetResponse();

HTTP-ответ содержит метаданные файла в формате JSON в заголовке x-dropbox-metadata. Давайте извлечем эти метаданные из заголовков и десериализовать их в экземпляр FileSystemInfo.

var metadata = response.Headers["x-dropbox-metadata"];
var file = ParseJson<FileSystemInfo>(metadata);

Теперь мы можем прочитать ответ и сохранить файл в виде байтового массива в экземпляре FileSystemInfo.

using (Stream responseStream = response.GetResponseStream())
using (MemoryStream memoryStream = new MemoryStream())
{
    byte[] buffer = new byte[1024];
    int bytesRead;
    do
    {
        bytesRead = responseStream.Read(buffer, 0, buffer.Length);
        memoryStream.Write(buffer, 0, bytesRead);
    } while (bytesRead > 0);

    file.Data = memoryStream.ToArray();
}            

И остается только вернуть наш экземпляр FileSystemInfo.

return file;

Вуаля, вот и вся реализация метода DownloadFile (…).

Благодаря тому, что мы проделали большую часть работы в предыдущих частях, эта статья оказалась довольно короткой. Ознакомьтесь с документацией Dropbox REST API, если вы хотите изучить его дальше и внедрить новые функции самостоятельно.

https://www.dropbox.com/developers/reference/api

В части 5 я расскажу, как вы можете загружать новые файлы в свой аккаунт Dropbox. Вы можете скачать исходный код, сопровождающий эту статью, со страницы загрузки. Если у вас есть какие-либо вопросы или предложения, напишите мне по электронной почте или оставьте комментарий.