如何将远程URL中的图像序列化到IsolateStorage或XML中?
如何将远程URL中的图像序列化到IsolateStorage或XML中?
我需要从远程URL下载图像并将它们序列化到隔离存储中,但是我在弄清楚如何使其工作方面遇到了困难。我目前正在将URI序列化为图像,并且可以使其工作,但是我想下载图像并将其存储在文件系统中,使用C#和Silverlight,有什么最好的方法来实现这一点呢。
我已经尝试找到一些方法来做到这一点,但它们太复杂了。如果可能的话,我可以将图像数据存储在XML中,如果这是一个解决方案,但我只想下载文件。桌面上的.NET有很多方法可以做到这一点,但我需要一个Silverlight的解决方案。
如果有任何示例可以演示这样的事情,那么这也可能有所帮助。这似乎是一个简单的问题,但我无法解决它,而且已经尝试了很多简化这个过程的方法,以便我可以将来自远程URL的图像保存到隔离存储中并异步进行。
我目前有一些可以做到这一点的代码,但我似乎无法简化它,如果需要的话,将在没有合适的替代方案发布后发布它。
如何将远程URL中的图像序列化到IsolateStorage或XML中?
问题的原因:
在某些情况下,我们可能需要将远程URL中的图像保存到本地存储或将其转换为XML格式。这可能是为了离线浏览、数据备份或其他目的。然而,我们可能不知道如何实现这个目标。
解决方法:
下面是一种解决方法,可以通过使用WebClient类和DownloadData方法来实现将远程URL中的图像序列化到IsolateStorage或XML中。
步骤1:引入所需的命名空间
在代码的开头,我们需要引入System.Net命名空间,以便使用WebClient类。
using System.Net;
步骤2:实例化WebClient类并下载图像数据
首先,我们需要创建WebClient类的实例,然后使用DownloadData方法从远程URL下载图像数据。在这个例子中,我们使用了Stack Overflow的网站图标作为示例。
WebClient client = new WebClient(); byte[] bytes = client.DownloadData("http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png");
步骤3:将图像数据保存到IsolateStorage或转换为XML
根据需求,我们可以选择将图像数据保存到IsolateStorage中或将其转换为XML格式。
保存到IsolateStorage:
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("image.png", FileMode.Create, isoStore)) { isoStream.Write(bytes, 0, bytes.Length); }
转换为XML:
XDocument doc = new XDocument( new XElement("Image", new XElement("Data", Convert.ToBase64String(bytes)) ) ); string xmlString = doc.ToString();
我们可以通过使用WebClient类的DownloadData方法从远程URL下载图像数据,并将其保存到IsolateStorage或转换为XML格式。这个解决方法可以帮助我们实现将远程URL中的图像序列化到IsolateStorage或XML中的需求。
问题:如何将远程URL的图像序列化到隔离存储或XML中?
原因:根据提供的代码,问题的出现是因为作者想要从远程URL获取图像,并将其保存到隔离存储中或将其序列化为XML。
解决方法:
1. 定义一个名为ImageGrabber的类,并添加一个GrabImage方法,该方法接受一个URL参数。
2. 在GrabImage方法中,创建HttpWebRequest对象,并设置请求的方法为POST。
3. 使用BeginGetRequestStream方法异步获取请求流,并指定一个RequestCallback回调函数。
4. 在RequestCallback回调函数中,使用BeginGetResponse方法异步获取响应流,并指定一个GetResponseCallback回调函数。
5. 在GetResponseCallback回调函数中,获取响应流,并使用ReadToEnd方法读取流中的字节,并将其保存到一个字节数组中。
6. 使用IsolatedStorageFile.GetUserStoreForApplication().CreateFile方法创建一个文件,并将字节数组写入该文件。
7. 文件将保存在隔离存储中的特定位置。
代码示例:
public class ImageGrabber { public void GrabImage(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.BeginGetRequestStream(RequestCallback, request); } private void RequestCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; request.BeginGetResponse(GetResponseCallback, request); } private void GetResponseCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); Stream streamResponse = response.GetResponseStream(); byte[] bytes = ReadToEnd(streamResponse); IsolatedStorageFile.GetUserStoreForApplication().CreateFile("file.png").Write(bytes, 0, bytes.Count()); } private static byte[] ReadToEnd(Stream stream) { // 读取流中的字节并返回字节数组 } }
文件保存位置:
`{System drive}:\Users\{User Name}\AppData\LocalLow\Microsoft\Silverlight\is\{bunch of autogenerated folders}\file.png`
以上方法被认为是解决问题的最佳方案,并且获得了积极的回应。