2016-07-21 34 views
0

Ich versuche, eine Datei von OneDrive mit dem OneDrive SDK herunterzuladen. Ich habe eine UWP-App, die ich erstellt habe.Datei von OneDrive mit OneDrive SDK herunterladen

Ich habe mich mit meinem OneDrive-Konto verbunden, aber verstehe nicht, was ich von dort tun soll. Es gibt viele Antworten, aber es scheint, dass sie sich nicht auf das neue OneDrive SDK beziehen.

Ich möchte diese Methode in C# tun.

StorageFile downloadedDBFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("\\shared\\transfers\\" + App.dbName, CreationCollisionOption.ReplaceExisting); 
Item item = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Request().GetAsync(); 

oneDriveClient verbindet sich gut. Ich bekomme sogar den "Gegenstand". Wie Sie sehen können, befindet es sich in einem Unterverzeichnis auf meinem OneDrive.

Ich habe eine lokale Datei in einem Unterverzeichnis namens heruntergeladenDBFile erstellt, so dass ich den Inhalt der OneDrive-Datei kopieren kann.

Was mache ich von hier?

Ich habe Datei auf OneDrive mit dieser Methode ohne Probleme hochgeladen.

IStorageFolder sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("shared\\transfers"); 
var folder = ApplicationData.Current.LocalFolder; 
var files = await folder.GetFilesAsync(); 

StorageFile dbFile = files.FirstOrDefault(x => x.Name == App.dbName); 
await dbFile.CopyAsync(sf, App.dbName.ToString(), NameCollisionOption.ReplaceExisting); 
StorageFile copiedFile = await StorageFile.GetFileFromPathAsync(Path.Combine(ApplicationData.Current.LocalFolder.Path, "shared\\transfers\\" + App.dbName)); 

var randomAccessStream = await copiedFile.OpenReadAsync(); 
Stream stream = randomAccessStream.AsStreamForRead(); 


var item = await oneDriveClient.Drive.Special.AppRoot.Request().GetAsync(); 

txtOutputText.Text = "Please wait. Copying File"; 

using (stream){var uploadedItem = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Content.Request().PutAsync<Item>(stream);} 

Vielen Dank im Voraus

Antwort

3

Das Item-Objekt Sie zurück bekommen ist nicht der Inhalt der Datei, es ist höchstwahrscheinlich Informationen über die Datei. Stattdessen müssen Sie die Content-Eigenschaft verwenden, um den Dateiinhalt als Stream zu erhalten, den Sie dann in eine Datei kopieren können. Der Code sieht wie folgt aus:

using (var downloadStream = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Content.Request().GetAsync()) 
{ 
    using (var downloadMemoryStream = new MemoryStream()) 
    { 
     await downloadStream.CopyToAsync(downloadMemoryStream); 
     var fileBytes = downloadMemoryStream.ToArray(); 
     await FileIO.WriteBytesAsync(downloadedDBFile, fileBytes); 
    } 
} 

Beachten Sie die .content auf dem Aufruf von Microsoft Onedrive, die einen Strom anstatt das Item-Objekt zurückgibt.