silverlight 显示ftp图片



silverlight的image控件只支持从项目任何文件夹和网页(http:\\**)的方式加载图片,这种方式比较简单。那么如何从ftp读取图片并显示呢?(本人刚从extjs中转到silverlight所以思路一直停留在image控件应该能直接加载呀)

主要采用的方式是web服务的方法通过FtpWebRequest请求到文件然后以byte的方式传送,当然你也可以使用WCF服务,都可以,建好服务以后,在服务端,添加如下代码:

[csharp] view plain copy print ?
  1. [WebMethod(Description = "获取指定文件流", EnableSession = true)]  
  2.        public byte[] getFile()  
  3.        {  
  4.              
  5.            //FileInfo fileInfo=new FileInfo(file)  
  6.            string uri = "ftp://192.168.0.224/eca/001/0/356/png8-ask.jpg";  
  7.            FtpWebRequest reqFtp;  
  8.            reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));  
  9.            reqFtp.Credentials = new NetworkCredential("eca""mis5");  
  10.   
  11.            reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;  
  12.            reqFtp.UseBinary = true;  
  13.            FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();  
  14.            Stream ftpStream = response.GetResponseStream();  
  15.            MemoryStream mStream = new MemoryStream();  
  16.            ftpStream.CopyTo(mStream);  
  17.            mStream.Position = 0;  
  18.            int length = (int)mStream.Length;  
  19.            byte[] returnbyte = new byte[length];  
  20.            mStream.Read(returnbyte, 0, length);  
  21.   
  22.            mStream.Close();  
  23.            ftpStream.Close();  
  24.            response.Close();  
  25.              
  26.   
  27.            return returnbyte;  
  28.   
  29.        }  
 [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;

        }

然后就是从前端调用了,代码如下:

[csharp] view plain copy print ?
  1. private void client_getFileCompleted(object sender, getFileCompletedEventArgs e)  
  2.        {  
  3.            byte[] buffer = e.Result;  
  4.            System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer);  
  5.            System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();  
  6.            bmp.SetSource(stream);  
  7.            Image image1 = new Image();  
  8.            image1.Source = bmp;  
  9.            TabItem tb = new TabItem();  
  10.            tb.Header = "读取系统图片";  
  11.            tb.Content = image1;  
  12.            tb.IsSelected = true;  
  13.            tal.Items.Add(tb);  
  14.        }  
 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控件,运行结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值