【问题标题】:OneDrive Downloaded *.jpeg Image File Corrupt in Windows Phone 8OneDrive 下载的 *.jpeg 图像文件在 Windows Phone 8 中损坏
【发布时间】:2014-04-29 07:19:59
【问题描述】:

我正在将我的应用数据库备份到 OneDrive。数据库记录是指存储在隔离存储中的图像。我也备份了这些图像。数据库文件。

备份文件的目的地是:

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 并查看 \shared\transfers,我可以看到该文件不再可读。它的大小约为 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 图片?

【问题讨论】:

    标签: c# windows-phone-8 onedrive


    【解决方案1】:

    试试这个作为你的下载路径:

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

    【讨论】:

    • 我面临同样的问题,文件没有被完全下载。但我的应用程序应该从 OneDrive 下载任何类型的文件。任何线索可能是什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多