将图像下载到Metro风格应用程序中的本地存储

Jay*_*nan 5 c# xaml windows-8 windows-runtime

在WinRT/C#中,如何将映像下载到本地文件夹以支持在线目录的缓存以供脱机使用?有没有办法直接下载图像并链接控件,以从缓存中获取它们作为后备?

    var downloadedimage = await HttpWebRequest.Create(url).GetResponseAsync();
    StorageFile imgfile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
                        "localfile.png", CreationCollisionOption.FailIfExists);
Run Code Online (Sandbox Code Playgroud)

我将如何将下载的图像存储为localfile.jpg?

Jay*_*nan 10

看起来像Windows 8的HttpClient示例中的代码解决了这个问题

    HttpRequestMessage request = new HttpRequestMessage(
        HttpMethod.Get, resourceAddress);
    HttpResponseMessage response = await rootPage.httpClient.SendAsync(request,
        HttpCompletionOption.ResponseHeadersRead);
Run Code Online (Sandbox Code Playgroud)

httpClient是一个HttpClient,它的BaseAddress需要设置为资源的服务器文件夹.然后,我们可以将其转换为图像源(如果这是我们正在下载的)

    InMemoryRandomAccessStream randomAccessStream = 
        new InMemoryRandomAccessStream();
    DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
    writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
    await writer.StoreAsync();
    BitmapImage image = new BitmapImage();
    imagecontrol.SetSource(randomAccessStream);
Run Code Online (Sandbox Code Playgroud)

或者将其写入文件

    var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
         filename, CreationCollisionOption.ReplaceExisting);
    var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
    DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));
    writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
    await writer.StoreAsync();
    writer.DetachStream();
    await fs.FlushAsync();
Run Code Online (Sandbox Code Playgroud)