我正在使用以下代码从网址
下载图片HttpClient client = new HttpClient();
var stream = await client.GetStreamAsync(new Uri("<your url>"));
var file = await KnownFolders.PictureLibrary.CreateFileAsync("myfile.png");
using (var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
using (stream)
await stream.CopyToAsync(targetStream.AsStreamForWrite());
}
有几位用户报告说它并不总是下载整个图像。他们有时会获得部分图像,剩下的只是垃圾。
这有什么理由吗? 谢谢!
答案 0 :(得分:7)
我建议使用DownloadData或DownloadDataAsync方法尝试WebClient类。
File.WriteAllBytes("myfile.png",
new WebClient().DownloadData("<your url>"));
编辑如果流给您带来麻烦,您可以使用字节数组响应。你的“使用”语句里面有异步代码可能会导致它提前处理,也许?
var httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync(new Uri("<Your URI>"));
var file = await KnownFolders.PictureLibrary.CreateFileAsync("myfile.png");
var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite)
await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
targetStream.FlushAsync().Wait();
targetStream.Close();
答案 1 :(得分:3)
BackgroundDownloader是下载文件的最简单方法。
using Windows.Storage;
public async Task DownloadPhoto(Uri uri)
{
var folder = ApplicationData.Current.LocalFolder;
var photoFile = await folder.CreateFileAsync("photo.jpg", CreationCollisionOption.ReplaceExisting);
var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader();
var dl = downloader.CreateDownload(uri, photoFile);
await dl.StartAsync();
}
答案 2 :(得分:1)
如果您使用HttpClient,那么如果您的图像大于64K,则会出错。您必须将httpClient.MaxResponseContentBufferSize设置为更大的值。
请参阅MSDN快速入门,其中将max-buffer-size设置为256K。 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/JJ152726(v=win.10).aspx
就个人而言,我使用BackgroundDownloader。