Способ скопировать файл из одного облака в другое? - PullRequest
0 голосов
/ 21 мая 2019

Итак, история в том, что я пишу файловый менеджер с двумя панелями (как у Total Commander).Я пытаюсь интегрировать в него 3 основных облачных провайдера (GDrive, Dropbox, OneDrive).Я пишу этот файловый менеджер на C # (WPF) и пытаюсь использовать официальные SDK.Одной из функций является то, что вы можете копировать файлы и папки из одного облака в другое, поэтому, как GDrive находится на левой панели и Dropbox на правой панели, так и копирование из GDrive в Dropbox.

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

Так что я думаю о разбиении файла на несколько частей во время загрузки (например, на части по 5 МБ), сохраняйте их в памяти, пока не загрузите этот файл.кусок к другому облаку.Таким образом, я бы не использовал машину клиента для хранения этого файла (кроме той части размером 5 МБ, конечно).

Есть ли способ достичь этого?

1 Ответ

0 голосов
/ 21 мая 2019

Вот код для загрузки файлов из GDrive.Вы замечаете, что он использует поток.Вы можете просто использовать объект потока для подачи объекта потока для загрузки.При поиске есть похожие примеры для другого диска.

    using Google.Apis.Authentication;
    using Google.Apis.Drive.v2;
    using Google.Apis.Drive.v2.Data;

    using System.Net;

    public class DownLoadFromGDrive{

      /// <param name="authenticator">
      /// Authenticator responsible for creating authorized web requests.
      /// </param>
      /// <param name="file">Drive File instance.</param>
      /// <returns>File's content if successful, null otherwise.</returns>

      public static System.IO.Stream DownloadFile(
          IAuthenticator authenticator, File file) {
        if (!String.IsNullOrEmpty(file.DownloadUrl)) {
          try {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
                new Uri(file.DownloadUrl));
            authenticator.ApplyAuthenticationToRequest(request);
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK) {
              return response.GetResponseStream();
            } 
            else 
           {
              return null;
            }
          } 
          catch (Exception e) 
          {
            return null;
          }
        } 
      }
    }

Эта ссылка объясняет, как загрузить в GDrive:

...