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


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

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

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

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

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

                //如果FTP站点指定路径为  D:Imageslist,图片的路径为 D:ImageslistA20181024xx.jpg
                //则 imgPath 为  A20181024
                //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; } }

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

  • 相关阅读:
    k8s是什么
    jmeter性能测试的策略
    面试的灵魂拷问:你最大的缺点是什么?
    面试的灵魂拷问:你做过的最令你自豪的事情是什么?
    面试的灵魂拷问:你犯过的最大的失误是什么?
    5-django rest framework,搭建api,这是最重要的章节
    4-restfulapi的介绍,vue代码结构
    组合恒等式证明——「Zeilberger 老爷子的 T 恤上写了啥?」
    「NOI2020」 美食家 【矩阵快速幂】
    [CEOI2014] The Wall【最短路】
  • 原文地址:https://www.cnblogs.com/Sientuo/p/9844064.html
Copyright © 2020-2023  润新知