加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从网页通用Windows应用程序下载并保存图片

发布时间:2020-12-15 23:30:03 所属栏目:百科 来源:网络整理
导读:我使用下面的代码从远程网址下载图片并保存到本地存储文件夹 try { var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync( "MyAppNameCoverPics",CreationCollisionOption.OpenIfExists); var coverpic_file = await rootFolder
我使用下面的代码从远程网址下载图片并保存到本地存储文件夹

try
        {
            var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync( "MyAppNameCoverPics",CreationCollisionOption.OpenIfExists);

            var coverpic_file = await rootFolder.CreateFileAsync(filename,CreationCollisionOption.FailIfExists);
            try
            {
                var httpWebRequest = HttpWebRequest.CreateHttp(coverUrl);
                HttpWebResponse response = (HttpWebResponse)await httpWebRequest.GetResponseAsync();
                Stream resStream = response.GetResponseStream();
                using (var stream = await coverpic_file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await resStream.CopyToAsync(stream.AsStreamForWrite());
                }
                response.Dispose();
            }
            catch //any exceptions happend while saving the picture
            {
                saved = false;
            }
        }
        catch
        {
            //https://msdn.microsoft.com/en-us/library/windows/apps/br227250.aspx 
            //Raise an exception if file already present 
            saved = true;
        }

在大多数情况下,此代码对我有用,但我注意到,对于少数图片,图像不能完全下载.

我在异步块中调用此函数,在foreach循环中单个go中有更多tahn 100个图像,最后几个是失败的下载

[我可以看到一些无效文件正在创建

或仅在下载和其他区域的图像的一部分,我可以看到黑色块[看起来像图像已损坏].

所有图像的大小仅小于1 MB

有人可以帮助我优化这段代码或指出代码中的错误,这样我就可以完全下载所有图像

解决方法

我的代码中没有看到任何错误.但在尝试了一些不同的下载和保存文件的方法后,我的代码就像这样

try
            {
                HttpClient client = new HttpClient(); // Create HttpClient
                byte[] buffer = await client.GetByteArrayAsync(coverUrl); // Download file
                using (Stream stream = await coverpic_file.OpenStreamForWriteAsync())
                    stream.Write(buffer,buffer.Length); // Save
            }
            catch
            {
                saved = false;
            }

并且此代码工作正常而不会导致任何问题所有图像都完全下载,并且没有更多的图像黑块问题.

如果任何人可以指出我的第一个代码的差异将真正有助于理解错误的原因

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读