一种将文件从一个云复制到另一个云的方法?

时间:2019-05-21 18:13:32

标签: c# google-drive-api cloud dropbox-api

因此,故事是我正在编写一个具有两个面板的文件管理器(就像Total Commander一样)。我正在尝试将3个主要的云提供商(GDrive,Dropbox,OneDrive)集成到其中。我正在用C#(WPF)编写此文件管理器,并尝试使用官方的SDK。 功能之一是您可以将文件和文件夹从一个云复制到另一云,例如,左侧面板上是GDrive,右侧面板上是Dropbox,然后从GDrive复制到Dropbox。

一种解决方案是该程序将文件从一个云临时下载到客户端计算机,然后从那里上传到另一台计算机。但是出于多种原因,我宁愿不使用它。

因此,我正在考虑在下载过程中将文件分成几部分(例如分成5MB的部分),将其保留在内存中,直到将其上传到另一个云为止。这样,我就不会使用客户端的计算机来存储该文件(当然,那5MB的部分除外)。

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

这是从GDrive下载文件的代码。您会注意到它使用了流。您可以只使用this流对象来提供要上传的流对象。如果您搜索其他驱动器,也有类似的示例。

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

This链接介绍了如何上传到GDrive: