读取FTP 图片文件,并显示,非下载

       关于FTP,先从怎么创建开始说起,很简单,步骤就两个

① 电脑-右键管理--本地用户组--添加用户名,密码(用于FTP的用户名、密码)

② IIS 新建FTP站点,命名,指定端口号、FTP文件路径

       接下来就是进行访问,网上有很多的FTP 帮助类,关于上传、下载,重命名、获取文件列表之类的方法。就不在赘述,这里主要讲下怎么获取图片,直接显示,而不必下载到本地。毕竟我这里的需求场景是实时刷新图片,不可能每个客户端都将摄像头识别到的目标图片下载到本地。其实当我们客户端在加载FTP文件的时候,就已经在执行下载的操作了,只是先将文件加载(下载)到内存中。如果要保存到本地,就指定一个物理路径,将加载到文件保存到该路径上即可(这一点查看FTP帮助类即可发现)。

下面我们要在客户端上显示该图片,首先最简单的方法便是,拼接图片路径,给picturebox 控件赋值

            //如果FTP站点指定路径为  D:\Images\list,图片的路径为 D:\Images\list\A\20181024\xx.jpg
            //则 imgPath 为  A\20181024
            //imgPath 图片所在的FTP路径(不包含图片名)
            //imgName  图片名
            //连接服务器FTP
            var url = string.Format("ftp://{0}:{1}@{2}/{3}/{4}", "fan", "12306", "192.168.0.101:2048", Path, imgName);
            //直接赋值
            pb_img.LoadAsync(url);

这种方法确实比较简单,但是有一个缺点,就是在频繁点击图片(加载大图图片)的时候,有时候程序会失去响应(并导致大图图片无法显示)。所以如果是单单显示图片,没有进一步的后续操作时,可以直接采用这种方法。此外还有一种方法,就是在内存中下载FTP图片,然后将其用byte字节数组加载出来,再用MemoryStream内存流包裹,最后将该流转换为图片。赋值并显示

        
//该路径为 ftp完整路径 带用户名,密码,端口号,图片路径,图片名,参考上一种方法中介绍
public static Image ReadImg(string ftpImgpath) { try { byte[] buffer = new WebClient().DownloadData(ftpImgpath); //byte[] 转内存流 MemoryStream ms = new MemoryStream(buffer); Image img = Image.FromStream(ms, true); //流用完要及时关闭 ms.Close(); return img; } catch (Exception) { //转换失败,显示默认图 var path = System.Windows.Forms.Application.StartupPath; var ary = path.Substring(0, path.IndexOf("bin")); var imgpath = ary + "\\img\\notfount.jpg"; PictureBox pb = new PictureBox(); pb.ImageLocation = imgpath; return pb.Image; } }

这种方法比较稳妥,暴力点击多次暂未发现啥异常。

 

转载于:https://www.cnblogs.com/Sientuo/p/9844064.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值