我使用下面的代码从远程网址下载图片并保存到本地存储文件夹
try { var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync( "MyAppName\\CoverPics", 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, 0, buffer.Length); // Save } catch { saved = false; }
并且此代码工作正常而不会导致任何问题所有图像都完全下载,并且没有更多的图像黑块问题.
如果任何人可以指出我的第一个代码的差异将真正有助于理解错误的原因