博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读取FTP 图片文件,并显示,非下载
阅读量:4966 次
发布时间:2019-06-12

本文共 1857 字,大约阅读时间需要 6 分钟。

       关于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

你可能感兴趣的文章
Java基础(三)—— 常用类
查看>>
Spring Cloud(二)—— Eureka注册与发现
查看>>
linux常用命令大全
查看>>
Form' threw an exception of type 'System.InvalidOperationException'
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(3)——webpack基础
查看>>
前端利器躬行记(4)——webpack进阶
查看>>
前端利器躬行记(5)——Git
查看>>
前端利器躬行记(6)——Fiddler
查看>>
每次阅读外文技术资料都头疼,终于知道原因了。
查看>>
zabbix短信网关调用问题总结
查看>>
130242014034-林伟领-实验一
查看>>
Insert excel data into DB
查看>>
复制和输入-编程中
查看>>
SQLSERVER 处理两个日期相减
查看>>
区间+状压 [Haoi2016]字符合并
查看>>
sublime text3 前端编译神器,浏览器实时显示
查看>>