FTP Server by python (pyftpdlib)

0 .背景

最近,需要做一個保存網絡攝像機上傳的圖片,并進行處理的程序,攝像機是通過移動偵測和遮擋偵測發(fā)送圖片到ftp服務器上. 為了實現上述目標,考慮編寫一套ftp server的代碼,這樣不僅可以保存圖片還可以處理不同用戶(攝像頭)上傳的圖片,物體檢測,人臉識別等可以同步執(zhí)行.
考慮到目前項目大都在python上,決定采用 pyftpdlib 開發(fā)ftp server.

c9a2f11637efbb65cecbd64b4e1a8cfa.jpg

1 .安裝

這個極為簡單:
(python3) pip3 install pyftpdlib
(python2) pip install pyftpdlib

2. Hello World

寫一個最簡單的ftp server代碼.
支持匿名登錄,一個用戶 'user' 密碼 '12345'),擁有全部權限.
匿名用戶只有只讀權限.
端口2121

import os

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

def main():
    # Instantiate a dummy authorizer for managing 'virtual' users
    authorizer = DummyAuthorizer()

    # Define a new user having full r/w permissions and a read-only
    # anonymous user
    authorizer.add_user('user', '12345', '.', perm='elradfmwMT')
    authorizer.add_anonymous(os.getcwd())

    # Instantiate FTP handler class
    handler = FTPHandler
    handler.authorizer = authorizer

    # Define a customized banner (string returned when client connects)
    handler.banner = "pyftpdlib based ftpd ready."

    # Specify a masquerade address and the range of ports to use for
    # passive connections.  Decomment in case you're behind a NAT.
    #handler.masquerade_address = '151.25.42.11'
    #handler.passive_ports = range(60000, 65535)

    # Instantiate FTP server class and listen on 0.0.0.0:2121
    address = ('', 2121)
    server = FTPServer(address, handler)

    # set a limit for connections
    server.max_cons = 256
    server.max_cons_per_ip = 5

    # start ftp server
    server.serve_forever()

if __name__ == '__main__':
    main()

3. 更完善的代碼

具備事件功能,可以監(jiān)控到上傳文件的用戶和文件名,可以進一步處理.

from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer


class MyHandler(FTPHandler):

    def on_connect(self):
        print ("%s:%s connected" % (self.remote_ip, self.remote_port))

    def on_disconnect(self):
        # do something when client disconnects
        pass

    def on_login(self, username):
        # do something when user login
        pass

    def on_logout(self, username):
        # do something when user logs out
        pass

    def on_file_sent(self, file):
        # do something when a file has been sent
        print(self.username, file)
        pass

    def on_file_received(self, file):
        # do something when a file has been received
        print(self.username, file)
        pass

    def on_incomplete_file_sent(self, file):
        # do something when a file is partially sent
        print(self.username, file)
        pass

    def on_incomplete_file_received(self, file):
        # remove partially uploaded files
        import os
        os.remove(file)


def main():
    authorizer = DummyAuthorizer()
    authorizer.add_user('user', '12345', homedir='.', perm='elradfmwMT')
    authorizer.add_anonymous(homedir='.')

    handler = MyHandler
    handler.authorizer = authorizer
    server = FTPServer(('', 2121), handler)
    server.serve_forever()

if __name__ == "__main__":
    main()

4. 性能對比

和主流的vsftp server性能對比


Screen Shot 2018-01-12 at 5.55.59 PM.png

5.下一步...

下一步的思路是:
1 . ftp服務監(jiān)控攝像頭上傳的圖片
2 . 獲取用戶(那個攝像頭)和圖片,做物體識別
3 .獲取人員或車輛的Box,裁剪圖片
4 .根據裁剪圖片處理作人員識別或車輛檢測
5 .處理結果反饋給對應攝像機的處理設備

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末吴菠,一起剝皮案震驚了整個濱河市岔冀,隨后出現的幾起案子疾瓮,更是在濱河造成了極大的恐慌现诀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对粪,死亡現場離奇詭異带膀,居然都是意外死亡,警方通過查閱死者的電腦和手機给涕,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜒蕾,“玉大人,你說我怎么就攤上這事焕阿∵浞龋” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵暮屡,是天一觀的道長撤摸。 經常有香客問我,道長,這世上最難降的妖魔是什么准夷? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任钥飞,我火速辦了婚禮,結果婚禮上衫嵌,老公的妹妹穿的比我還像新娘读宙。我一直安慰自己,他們只是感情好楔绞,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布结闸。 她就那樣靜靜地躺著,像睡著了一般酒朵。 火紅的嫁衣襯著肌膚如雪桦锄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天蔫耽,我揣著相機與錄音结耀,去河邊找鬼。 笑死匙铡,一個胖子當著我的面吹牛图甜,可吹牛的內容都是我干的。 我是一名探鬼主播慰枕,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼具则,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了具帮?” 一聲冷哼從身側響起博肋,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜂厅,沒想到半個月后匪凡,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡掘猿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年病游,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠通。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡衬衬,死狀恐怖,靈堂內的尸體忽然破棺而出改橘,到底是詐尸還是另有隱情滋尉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布飞主,位于F島的核電站狮惜,受9級特大地震影響高诺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜碾篡,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一虱而、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧开泽,春花似錦牡拇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至众旗,卻和暖如春罢杉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贡歧。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工滩租, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人利朵。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓律想,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绍弟。 傳聞我的和親對象是個殘疾皇子技即,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫、插件樟遣、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,033評論 4 62
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理而叼,服務發(fā)現,斷路器豹悬,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 圖片更清晰葵陵,文字在最下面 FTP是TCP/IP的一種應用,使用TCP而不是UDP瞻佛,所以是可靠的脱篙,面向連接的。 FT...
    停下浮躁的心閱讀 1,688評論 0 4
  • 有些人的一生伤柄,一眼就可以望到頭绊困。 最近突然有一個特別大的慨嘆:深深地體悟到,一個人現在的生活方式适刀,真的就決定了他以...
    Jimuboy閱讀 250評論 0 0
  • 我想養(yǎng)一只小寵物蔗彤,比如貓川梅,該不該養(yǎng)?身邊很常見的問題然遏! 很快讓我想起了多少次深夜小區(qū)偶遇的那些流浪貓贫途,眼神可憐兮兮...
    聽外婆的話閱讀 496評論 0 0