2014-04-21 109 views
1

我正在将我的应用程序数据库备份到OneDrive。数据库记录涉及存储在独立存储中的图像。我也备份这些图像。数据库文件。OneDrive已下载* .jpeg Windows Phone 8中的图像文件损坏

备份文件的目的地是:

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

的JPG图片文件的目的是

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

数据库恢复正常,但图像没有。我已验证该图像是在SkyDrive上正确备份的 - 我可以在SkyDrive上看到它并将其打开。但是,当我恢复时,文件已损坏。下面是我用它来恢复代码:

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

使用ISETool和观看\共享\转账,我可以看到文件不再可读。它的大小约为128k,而原始图像要大得多。

我也试了这一点,这是我的原代码,直到我开始看到的问题:

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

仅供参考,这里的FindFolder和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; 
} 

我如何成功从我的OneDrive文件夹下载* .jpg图像?

回答

1

尝试此您的下载路径,而不是:

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

我面临同样的问题的文件没有得到完全下载..但我的应用程序是假设从OneDrive下载任何类型的文件。任何线索可能是什么问题? –