如何将图像 URL 转换为存储文件?
How to convert an Image URL into a StorageFile?
我正在使用 Unsplash API 获取图片。当我发送图像请求时,部分答案是图像 URL,如下所示:
我能够将此 URL 设为 BitmapImage 并使其成为应用 UI 中的图像源。但是我无法将其下载为 StorageFile。
如何从这种 URL and/or 中下载图像并使其成为 StorageFile?
以下代码会将文件下载到本地存储,然后为您提供一个可用于设置图像源的 Uri:
private async Task<String> DownloadImage(string url, String fileName)
{
const String imagesSubdirectory = "DownloadedImages";
var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(imagesSubdirectory, CreationCollisionOption.OpenIfExists);
var storageFile = await rootFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (HttpClient client = new HttpClient())
{
byte[] buffer = await client.GetByteArrayAsync(url);
using (Stream stream = await storageFile.OpenStreamForWriteAsync())
stream.Write(buffer, 0, buffer.Length);
}
// Use this path to load image
String newPath = String.Format("ms-appdata:///local/{0}/{1}", imagesSubdirectory, fileName);
return newPath;
}
// Here is an example of how to use the new DownloadImage() method
private async void Button_Download(object sender, RoutedEventArgs e)
{
var uniqueFileName = $@"{Guid.NewGuid()}.jpg";
String newPath = await DownloadImage("https://images.unsplash.com/photo-1535159530326-d7bf54bfb24e?ixlib=rb-0.3.5&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjM1NDkzfQ&s=6dbf8e03a25f469d0f845992e6b2eb9e",
uniqueFileName);
myImage.Source = new BitmapImage(new Uri(newPath));
}
我正在使用 Unsplash API 获取图片。当我发送图像请求时,部分答案是图像 URL,如下所示:
我能够将此 URL 设为 BitmapImage 并使其成为应用 UI 中的图像源。但是我无法将其下载为 StorageFile。
如何从这种 URL and/or 中下载图像并使其成为 StorageFile?
以下代码会将文件下载到本地存储,然后为您提供一个可用于设置图像源的 Uri:
private async Task<String> DownloadImage(string url, String fileName)
{
const String imagesSubdirectory = "DownloadedImages";
var rootFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(imagesSubdirectory, CreationCollisionOption.OpenIfExists);
var storageFile = await rootFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (HttpClient client = new HttpClient())
{
byte[] buffer = await client.GetByteArrayAsync(url);
using (Stream stream = await storageFile.OpenStreamForWriteAsync())
stream.Write(buffer, 0, buffer.Length);
}
// Use this path to load image
String newPath = String.Format("ms-appdata:///local/{0}/{1}", imagesSubdirectory, fileName);
return newPath;
}
// Here is an example of how to use the new DownloadImage() method
private async void Button_Download(object sender, RoutedEventArgs e)
{
var uniqueFileName = $@"{Guid.NewGuid()}.jpg";
String newPath = await DownloadImage("https://images.unsplash.com/photo-1535159530326-d7bf54bfb24e?ixlib=rb-0.3.5&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjM1NDkzfQ&s=6dbf8e03a25f469d0f845992e6b2eb9e",
uniqueFileName);
myImage.Source = new BitmapImage(new Uri(newPath));
}