9

我正在努力解决一个简单的问题。我想使用以下代码从网络下载图像:

WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg");
WebResponse responsePic = await requestPic.GetResponseAsync();

现在我想在 StorageFile 中编写 WebResponse 的流(例如,在应用程序的存储中创建一个文件 id.jpg),但我还没有找到任何方法来实现这一点。我在网上搜索它,但没有成功 - 各种方式不兼容的流类型等等。

能否请你帮忙?

4

3 回答 3

12

我找到了以下解决方案,该解决方案有效且不太复杂。

    public async static Task<StorageFile> SaveAsync(
        Uri fileUri,
        StorageFolder folder,
        string fileName)
    {
        var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
        var downloader = new BackgroundDownloader();
        var download = downloader.CreateDownload(
            fileUri,
            file);

        var res = await download.StartAsync();            

        return file;
    }
于 2012-07-19T14:58:51.023 回答
7

您需要将响应流读入缓冲区,然后将数据写入 StorageFile。以下代码显示了一个示例:

        var fStream = responsePic.GetResponseStream();
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("testfile.txt");
        using (var ostream = await file.OpenStreamForWriteAsync())
        {
            int count = 0;
            do
            {
                var buffer = new byte[1024];
                count = fStream.Read(buffer, 0, 1024);
                await ostream.WriteAsync(buffer, 0, count);
            }
            while (fStream.CanRead && count > 0);
        }
于 2012-07-07T05:54:17.650 回答
0

这可以使用 Windows Store Apps 中的 C++ REST SDK来完成。HTTP 客户端教程对此进行了解释。

于 2015-08-27T11:10:02.263 回答