因此,故事是我正在编写一个具有两个面板的文件管理器(就像Total Commander一样)。我正在尝试将3个主要的云提供商(GDrive,Dropbox,OneDrive)集成到其中。我正在用C#(WPF)编写此文件管理器,并尝试使用官方的SDK。 功能之一是您可以将文件和文件夹从一个云复制到另一云,例如,左侧面板上是GDrive,右侧面板上是Dropbox,然后从GDrive复制到Dropbox。
一种解决方案是该程序将文件从一个云临时下载到客户端计算机,然后从那里上传到另一台计算机。但是出于多种原因,我宁愿不使用它。
因此,我正在考虑在下载过程中将文件分成几部分(例如分成5MB的部分),将其保留在内存中,直到将其上传到另一个云为止。这样,我就不会使用客户端的计算机来存储该文件(当然,那5MB的部分除外)。
有什么办法可以做到这一点?
答案 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: