我正在努力解决一个简单的问题。我想使用以下代码从网上下载图片:
WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg");
WebResponse responsePic = await requestPic.GetResponseAsync();
现在我想在StorageFile中编写WebResponse的流(例如,在应用程序的存储中创建一个文件id.jpg),但我还没有找到任何方法来实现它。我在网上搜索它,但没有成功 - 所有方式都不兼容Stream类型等等。
你能帮忙吗?
答案 0 :(得分: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;
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)