c# windows-phone-8 windows-8 windows-store-apps windows-phone-8.1

c# - ¿Cómo descargar y almacenar una imagen usando Windows.Web.Http?



windows-phone-8 windows-8 (3)

Puede obtener un búfer utilizando el método GetBufferAsync y luego llamar a FileIO.WriteBufferAsync para escribir el búfer en un archivo:

Uri uri = new Uri("http://i.stack.imgur.com/ZfLdV.png?s=128&g=1"); string fileName = "daniel2.png"; StorageFile destinationFile = await KnownFolders.PicturesLibrary.CreateFileAsync( fileName, CreationCollisionOption.GenerateUniqueName); HttpClient client = new HttpClient(); var buffer = await client.GetBufferAsync(uri); await Windows.Storage.FileIO.WriteBufferAsync(destinationFile, buffer);

¿Cómo descargo y almaceno una imagen JPEG de Internet en una aplicación de Windows Store con Windows.Web.Http?

El problema que estoy enfrentando es que no sé qué obtener ... Async y Write ... Método asíncrono que debo usar para una imagen. Es muy diferente con los archivos, que con las cadenas.

Solo Windows.Web.Http !

¡Sin soluciones de terceros !

Si sugiere algo más, utilice la sección de comentarios, no la respuesta. ¡Gracias!

… using Windows.Storage; using Windows.Web.Http; Uri uri = new Uri("http://image.tmdb.org/t/p/w300/" + posterPath); HttpClient httpClient = new HttpClient(); // I guess I need to use one of the Get...Async methods? var image = await httpClient.Get…Async(uri); StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFolder cachedPostersFolder = await localFolder.CreateFolderAsync("cached posters", CreationCollisionOption.OpenIfExists); StorageFile posterFile = await cachedPostersFolder.CreateFileAsync(posterPath, CreationCollisionOption.ReplaceExisting); // I guess I need to use one of the Write...Async methods? await FileIO.Write…Async(posterFile, image);


image1.Source = new BitmapImage(new Uri("http://www.image.com/image.jpg", UriKind.RelativeOrAbsolute)); using (var mediaLibrary = new MediaLibrary()) { using (var stream = new MemoryStream()) { var fileName = string.Format("Gs{0}.jpg", Guid.NewGuid()); bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100); stream.Seek(0, SeekOrigin.Begin); var picture = mediaLibrary.SavePicture(fileName, stream); if (picture.Name.Contains(fileName)) return true; } }


Esta es una respuesta similar a la de John, sin embargo, en WP8.1 no puede usar GetBufferAsync. En su lugar, puedes usar GetStreamAsync de la manera que tengo:

Uri uri = new Uri(UriString); string fileName = p4.IconLocation; HttpClient client = new HttpClient(); var streamImage = await client.GetStreamAsync(uri); await SaveToLocalFolderAsync(streamImage, fileName);

usando la función:

public async Task SaveToLocalFolderAsync(Stream file, string fileName) { StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFile storageFile = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); using (Stream outputStream = await storageFile.OpenStreamForWriteAsync()) { await file.CopyToAsync(outputStream); } }