关于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", "", "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(, path.IndexOf("bin"));
var imgpath = ary + "\\img\\notfount.jpg";
PictureBox pb = new PictureBox();
pb.ImageLocation = imgpath;
return pb.Image;
} }

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

读取FTP 图片文件,并显示,非下载的更多相关文章

  1. FileReader:读取本地图片文件并显示

    最近忙得比狗还惨,导致长时间没能更新文章,真心对不住啊.抽空整理了下关于在页面上读取和显示本地图片的实例文章,本文通过实例讲解如何使用支持FileReader浏览器的用户将能够通过一个file inp ...

  2. 【ABAP系列】SAP ABAP 实现FTP的文件上传与下载

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 实现FTP的文 ...

  3. [转]opengl入门例题(读取bmp图片,并显示)

    #include<gl/glut.h> #define FileName "bliss.bmp" static GLint imagewidth; static GLi ...

  4. paip.解决中文url路径的问题图片文件不能显示

    paip.解决中文url路径的问题图片文件不能显示 #现状..中文url路径 图片文件不能显示 <img src="img/QQ截图20140401175433.jpg" w ...

  5. 解决“用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示”的问题记录(备忘)

    解决"用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示"的问题记录(备忘) 历时几个小时百度,终于靠自己理解解决了GitHub仓库图 ...

  6. android 读取本地json文件 解决显示乱码显示

    1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson(Context context,  String fileName){         ...

  7. jdbc读取数据库图片文件

    package 读取大文件.read; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.I ...

  8. 记crt 在windows与linux服务器之间利用ftp进行文件的上传下载

    我们首先来熟悉一些相关的命令以及操作: ls      #展示linux服务器当前工作目录[你连接sftp时所处的目录]下的所有文件以及文件夹 lcd  F:\niki      #绑定你在windo ...

  9. vue使用axios读取本地json文件来显示echarts折线图

    编辑器:HBuilderx axios文档:http://www.axios-js.com/zh-cn/docs/ echarts实例:https://echarts.apache.org/examp ...

随机推荐

  1. XVII Open Cup named after E.V. Pankratiev. Eastern GP, Division 1

    A. Count The Ones $ans=b-c+1$. #include <stdio.h> using namespace std ; int a , b , c ; void s ...

  2. C# ToString()和Convert.ToString()的区别【转】

    一.一般用法说明 ToString()是Object的扩展方法,所以都有ToString()方法;而Convert.ToString(param)(其中param参数的数据类型可以是各种基本数据类型, ...

  3. 数据仓库中的Inmon与Kimball架构

    对于数据仓库体系结构的最佳问题,始终存在许多不同的看法,甚至有人把Inmon和Kimball之争称之为数据仓库界的“宗教战争”,那么本文就通过对两位提倡的数据仓库体系和市场流行的另一种体系做简单描述和 ...

  4. llinux挂载多个光驱

    因为u盘量产,一个u盘两启,所以linux需要访问多个cdrom(一个物理光驱,一个虚拟光驱),本来一位无法使用,看了看/dev目录下面, [root@linux-node3 cdrom]$ ll / ...

  5. 使用SwitchToThisWindow时不切换问题

    在网上很难找到SwitchToThisWindow这种问题的处理,自己研究了下终于找到了问题,记录下来便于后人参考. 解决方法: 1.键盘HOOK时不要调用CallNextHookEx,因为按键消息与 ...

  6. WPF气泡样式弹窗效果

    页面设计需求,做了一个气泡形状的弹出框,效果如下: 设计思路如下: 1. 使用Path绘制气泡的尖尖,将这个放到顶层: 2. 在用border绘制长方形框,将这个放到底层,并且设置Margin值,使得 ...

  7. kettle 通用的数据库迁移流程

    需求: 1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle. 2.你是否还在使用kettle重复的画着:表输入-表输出.创建表,而烦恼. 下面为你实现了一套通用的数据库迁移流程. ...

  8. js点击复制剪贴板

    代码用原生写的.工作中用的angular,所以如果有用angular的话,请把js代码copyToClipboard函数中的document.getElementById(elementId).inn ...

  9. js手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    if(window.navigator.userAgent.indexOf('Android') > -1 || window.navigator.userAgent.indexOf('Adr' ...

  10. java 多线程争抢资源死锁

    多线程争抢资源死锁的原理就是,A线程正在持有锁1却想获取锁2,B线程正在持有锁2却要获取锁1 代码如下: public class Main { static ReentrantLock lock1 ...