2014-04-21 5 views
1

Je fais une sauvegarde de ma base de données d'applications à OneDrive. Les enregistrements de la base de données se réfèrent aux images stockées dans un stockage isolé. Je sauvegarde également ces images. Les fichiers de base de données.OneDrive téléchargé * Fichier image .jpeg corrompu dans Windows Phone 8

Les destinations du fichier de sauvegarde est la suivante:

me/skydrive/my_documents/MyCompany/MyApp/MyBackup.bak 

La destination des fichiers d'image jpg est

me/skydrive/my_documents/MyCompany/MyApp/MyBackup Images/*.jpg 

La base de données restaure bien, mais les images ne sont pas. J'ai vérifié que l'image est sauvegardée correctement sur SkyDrive - je peux le voir et l'ouvrir correctement à partir de SkyDrive. Cependant, lorsque je restaure, le fichier est corrompu. Voici le code que j'utilise pour restaurer:

dynamic cmpFolder = await oneDrive.FindFolder("MyCompany", "me/skydrive/my_documents"); 
dynamic appFolder = await oneDrive.FindFolder(AppName, cmpFolder.id); 

string imagesFileName = Path.GetFileNameWithoutExtension(selectedFile.FileName) + " Images"; 
dynamic imgFolder = await oneDrive.FindFolder(imagesFileName, appFolder.id); 

dynamic fileList = await oneDrive.FindFiles(imgFolder.id); 

foreach (var fileData in fileList.data) 
{ 
    string fileName = fileData.name; 
    var file = 
     await wilFolder.CreateFileAsync(
      Path.GetFileName(fileName), CreationCollisionOption.ReplaceExisting); 

    var result = await client.BackgroundDownloadAsync(selectedFile.FileID + 
     "/content/", new Uri(@"\shared\transfers\" + fileName, UriKind.Relative)); 
} 

En utilisant ISETool et affichage \ partage \ transferts, je peux voir que le fichier ne soit plus lisible. Sa taille est d'environ 128k, alors que l'image originale était beaucoup plus grande.

J'ai aussi essayé ce qui était mon code d'origine jusqu'à ce que je commencé à voir le problème:

var downloadResult = await client.DownloadAsync(selectedFile.FileID + "/content/"); 

using (Stream oneDriveStream = downloadResult.Stream) 
{ 
    oneDriveStream.Position = 0; 
    byte[] imageBytes = new byte[oneDriveStream.Length]; 
    int count = oneDriveStream.Read(imageBytes, 0, imageBytes.Length); 

    using (var s = await file.OpenStreamForWriteAsync()) 
    { 
     oneDriveStream.CopyTo(s); 

     // and tried this 
     //s.Write(imageBytes, 0, imageBytes.Length); 
    } 
} 

Pour référence, voici les implémentations FindFolder et FindFiles:

public async Task<dynamic> FindFiles(string folderName) 
{ 
    LiveOperationResult filesResult = await client.GetAsync(folderName + "/files"); 
    dynamic files = filesResult.Result; 

    return files; 
} 

public async Task<dynamic> FindFolder(string folderName, string parentFolder) 
{ 
    LiveOperationResult folderResult = await client.GetAsync(parentFolder + "/files?filter=folders"); 
    dynamic folders = folderResult.Result; 

    foreach (var folder in folders.data) 
     if (folder.name == folderName) 
      return folder; 

    return null; 
} 

Comment puis-je télécharger avec succès les images * .jpg de mon dossier OneDrive?

Répondre

1

Essayez ceci pour votre chemin de téléchargement au lieu:

var downloadResult = await client.DownloadAsync(selectedFile.FileID + "/picture?type=full"); 
+0

Je suis face même question que les fichiers ne sont pas complètement téléchargés se .. mais ma demande est supposé télécharger tout type de fichier à partir onedrive. aucune idée de ce qui pourrait être le problème? –