使用OneDrive SDK从OneDrive下载文件

使用OneDrive SDK从OneDrive下载文件,sdk,uwp,onedrive,Sdk,Uwp,Onedrive,我正在尝试使用OneDrive SDK从OneDrive下载文件。我已经创建了一个UWP应用程序 我已连接到我的OneDrive帐户,但不明白从那里该做什么。有很多答案,但似乎它们不适用于新的OneDrive SDK 我想在C#中使用这个方法 StorageFile downloaddedbfile=wait ApplicationData.Current.LocalFolder.CreateFileAsync(“\\shared\\transfers\\”+App.dbName,Creatio

我正在尝试使用OneDrive SDK从OneDrive下载文件。我已经创建了一个UWP应用程序

我已连接到我的OneDrive帐户,但不明白从那里该做什么。有很多答案,但似乎它们不适用于新的OneDrive SDK

我想在C#中使用这个方法

StorageFile downloaddedbfile=wait ApplicationData.Current.LocalFolder.CreateFileAsync(“\\shared\\transfers\\”+App.dbName,CreationCollisionOption.ReplaceExisting);
Item Item=wait oneDriveClient.Drive.Root.ItemWithPath(“Apps/BicycleApp/ALUWP.db”).Request().GetAsync();
oneDriveClient连接良好。我甚至得到了“物品”。正如您所看到的,它位于我的OneDrive的子目录中

我在一个子目录中创建了一个名为downloaddedbfile的本地文件,以便将OneDrive文件的内容复制到

我该怎么办

我已使用此方法将文件上载到OneDrive,没有问题

IStorageFolder sf=wait Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync(“共享\\传输”);
var folder=ApplicationData.Current.LocalFolder;
var files=await folder.getfileasync();
StorageFile dbFile=files.FirstOrDefault(x=>x.Name==App.dbName);
等待dbFile.copySync(sf,App.dbName.ToString(),NameCollisionOption.ReplaceExisting);
StorageFile copiedFile=Wait StorageFile.GetFileFromPathAsync(Path.Combine(ApplicationData.Current.LocalFolder.Path,“共享\\传输\\\”+App.dbName));
var randomAccessStream=wait copiedFile.OpenReadAsync();
Stream=randomAccessStream.AsStreamForRead();
var item=await-oneDriveClient.Drive.Special.AppRoot.Request().GetAsync();
txtOutputText.Text=“请稍候。正在复制文件”;
使用(stream){var uploadedItem=wait oneDriveClient.Drive.Root.ItemWithPath(“Apps/BicycleApp/ALUWP.db”).Content.Request().PutAsync(stream);}

提前感谢

您要返回的项目对象不是文件内容,很可能是有关文件的信息。相反,您需要使用Content属性以流的形式获取文件内容,然后将其复制到文件中。代码如下所示:

使用(var downloadStream=wait oneDriveClient.Drive.Root.ItemWithPath(“Apps/BicycleApp/ALUWP.db”).Content.Request().GetAsync())
{
使用(var downloadMemoryStream=new MemoryStream())
{
等待downloadStream.CopyToAsync(downloadMemoryStream);
var fileBytes=downloadMemoryStream.ToArray();
等待FileIO.WriteBytes同步(下载的文件,fileBytes);
}
}

注意调用OneDrive时的.Content,它返回一个流而不是Item对象。

您要返回的Item对象不是文件内容,很可能是关于文件的信息。相反,您需要使用Content属性以流的形式获取文件内容,然后将其复制到文件中。代码如下所示:

使用(var downloadStream=wait oneDriveClient.Drive.Root.ItemWithPath(“Apps/BicycleApp/ALUWP.db”).Content.Request().GetAsync())
{
使用(var downloadMemoryStream=new MemoryStream())
{
等待downloadStream.CopyToAsync(downloadMemoryStream);
var fileBytes=downloadMemoryStream.ToArray();
等待FileIO.WriteBytes同步(下载的文件,fileBytes);
}
}

注意调用OneDrive时的.Content,它返回一个流而不是Item对象。

我使用HttpClient(因为我不想向项目中添加更多DLL)。这只是几行代码。首先获取
DriveItems
的列表,其中每一个都包括
downloadUrl
。然后执行httpclient.GetAsync(uri)。Dowloading不需要任何身份验证,因为uri在几分钟后过期。它也更高效,因为下载不会通过您的服务器。它节省了处理能力和带宽。我将downloadUrl放在href中,这样下载就不会击中我的服务器。我使用HttpClient(因为我不想在项目中添加更多DLL)。这只是几行代码。首先获取
DriveItems
的列表,其中每一个都包括
downloadUrl
。然后执行httpclient.GetAsync(uri)。Dowloading不需要任何身份验证,因为uri在几分钟后过期。它也更高效,因为下载不会通过您的服务器。它节省了处理能力和带宽。我将downloadUrl放在href中,这样下载就不会击中我的服务器。