讀取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; } }

這種方法比較穩妥,暴力點擊多次暫未發現啥異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM