silverlight的image控件只支持从项目任何文件夹和网页(http:\\**)的方式加载图片,这种方式比较简单。那么如何从ftp读取图片并显示呢?(本人刚从extjs中转到silverlight所以思路一直停留在image控件应该能直接加载呀)
主要采用的方式是web服务的方法通过FtpWebRequest请求到文件然后以byte的方式传送,当然你也可以使用WCF服务,都可以,建好服务以后,在服务端,添加如下代码:
- [WebMethod(Description = "获取指定文件流", EnableSession = true)]
- public byte[] getFile()
- {
- //FileInfo fileInfo=new FileInfo(file)
- string uri = "ftp://192.168.0.224/eca/001/0/356/png8-ask.jpg";
- FtpWebRequest reqFtp;
- reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- reqFtp.Credentials = new NetworkCredential("eca", "mis5");
- reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
- reqFtp.UseBinary = true;
- FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- MemoryStream mStream = new MemoryStream();
- ftpStream.CopyTo(mStream);
- mStream.Position = 0;
- int length = (int)mStream.Length;
- byte[] returnbyte = new byte[length];
- mStream.Read(returnbyte, 0, length);
- mStream.Close();
- ftpStream.Close();
- response.Close();
- return returnbyte;
- }
[WebMethod(Description = "获取指定文件流", EnableSession = true)]
public byte[] getFile()
{
//FileInfo fileInfo=new FileInfo(file)
string uri = "ftp://192.168.0.224/eca/001/0/356/png8-ask.jpg";
FtpWebRequest reqFtp;
reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFtp.Credentials = new NetworkCredential("eca", "mis5");
reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
reqFtp.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
Stream ftpStream = response.GetResponseStream();
MemoryStream mStream = new MemoryStream();
ftpStream.CopyTo(mStream);
mStream.Position = 0;
int length = (int)mStream.Length;
byte[] returnbyte = new byte[length];
mStream.Read(returnbyte, 0, length);
mStream.Close();
ftpStream.Close();
response.Close();
return returnbyte;
}
然后就是从前端调用了,代码如下:
- private void client_getFileCompleted(object sender, getFileCompletedEventArgs e)
- {
- byte[] buffer = e.Result;
- System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer);
- System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
- bmp.SetSource(stream);
- Image image1 = new Image();
- image1.Source = bmp;
- TabItem tb = new TabItem();
- tb.Header = "读取系统图片";
- tb.Content = image1;
- tb.IsSelected = true;
- tal.Items.Add(tb);
- }
private void client_getFileCompleted(object sender, getFileCompletedEventArgs e)
{
byte[] buffer = e.Result;
System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer);
System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
bmp.SetSource(stream);
Image image1 = new Image();
image1.Source = bmp;
TabItem tb = new TabItem();
tb.Header = "读取系统图片";
tb.Content = image1;
tb.IsSelected = true;
tal.Items.Add(tb);
}
其中tal是一个table控件,运行结果如下: