bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Python實現(xiàn)FTP文件傳輸?shù)膶嵗?創(chuàng)新互聯(lián)

FTP一般流程

十載專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計,高端網(wǎng)頁制作,對被動防護網(wǎng)等多個領(lǐng)域,擁有多年的網(wǎng)站維護經(jīng)驗。

FTP對應(yīng)PASV和PORT兩種訪問方式,分別為被動和主動,是針對FTP服務(wù)器端進行區(qū)分的,正常傳輸過程中21號端口用于指令傳輸,數(shù)據(jù)傳輸端口使用其他端口。

PASV:由客戶端發(fā)起數(shù)據(jù)傳輸請求,服務(wù)器端返回并攜帶數(shù)據(jù)端口,并且服務(wù)器端開始監(jiān)聽此端口等待數(shù)據(jù),為被動模式;

PORT:客戶端監(jiān)聽端口并向服務(wù)器端發(fā)起請求,服務(wù)器端主動連接此端口進行數(shù)據(jù)傳輸,為主動模式。

Python實現(xiàn)FTP文件傳輸?shù)膶嵗?></p>
<p>其中TYPE分兩種模式,I對應(yīng)二進制模式、A對應(yīng)ASCII模式;</p>
<p>PASV為客戶端發(fā)送請求,之后227為服務(wù)器端返回操作碼表示成功,并且后面帶有服務(wù)器端監(jiān)聽的端口:143x256(左移8位)+48</p>
<p>之后通過STOR命令進行數(shù)據(jù)下載,下載完成后返回226表示數(shù)據(jù)傳輸完成。</p>
<p>2. Python代碼實現(xiàn):</p>
<p>中文路徑問題:由于FTP支持ASCII編碼,Python ftplib中編碼方式使用latin-1,而window默認編碼方式為gbk,所以使用Python處理時需先將中文路徑編碼為gbk之后譯碼為latin-1字符;</p>
<p>上傳下載使用storline和retrline,對應(yīng)二進制使用storbinary和retrbinary。對于stor類函數(shù)后面的參數(shù)fp表示接收一個文件對象,支持read方法,一般為打開需要上傳的源文件,而retr類函數(shù)后面的參數(shù)表示對于返回數(shù)據(jù)的處理方法。</p>
<p>從一個FTP服務(wù)器到另一個FTP服務(wù)器的數(shù)據(jù)傳輸:</p>
<p>利用本地電腦作為數(shù)據(jù)緩存,但并不將數(shù)據(jù)保存到硬盤,只在內(nèi)存中存儲進行數(shù)據(jù)傳輸;其中一端作為下載一端為數(shù)據(jù)上傳。</p>
<p>首先登陸兩個FTP服務(wù)器,transfercmd函數(shù)用于發(fā)送命令并返回已建立好連接的本地Socket,此時分別在兩個本地Socket進行數(shù)據(jù)的收發(fā)即可。</p>
<p>在測試中發(fā)現(xiàn),在發(fā)送完一個文件之后只有及時的關(guān)閉socket,21端口才會返回226,數(shù)據(jù)完成指示,這樣才可以循環(huán)下一個文件,在完成之后要退出FTP。</p>

<pre>
#coding=utf-8

import ftplib,os.path,os
import socket

f1=ftplib.FTP('172.16.2.76')
f2=ftplib.FTP('172.16.25.153')


class myFTP:
    path='file/download/bbb/'
    # ftplib中編碼使用latin-1
    title='版本'.encode(encoding='gbk').decode(encoding='latin-1')
    path2=path+title  
    localDir='E:\\ver\\fp\\'
    
    path3='abc/edf/'
    

    def __init__(self):
           
      try:
        f1.login('username','password')
      except ftplib.error_perm:
        print('f1 cannot loggin!')
        return

      try:
        f2.login()
      except ftplib.error_perm:
        print('f2 cannot loggin!')
        return
        
    def ftpD(self):
             
      filelist=[]
      fileLIST=[]
      filels=f1.retrlines('LIST %s'%(self.path2),callback=filelist.append)
      f1.cwd(self.path2)
      for file in filelist:
        fileAttr=file.split(' ')
        fileName=fileAttr[-1]
        fileType=fileAttr[0][0]
        if fileType=='-':
          fileLIST.append(fileName)
    
      for file in fileLIST:
        path=self.localDir+file
        f1.retrbinary('RETR %s'%(file),open(path,'wb').write)
        print('%s download.....'%(file))    
      f1.quit()
    
    def ftpU(self,fun=1):
    
      os.chdir(self.localDir)
      fileList=os.listdir()
      
      # upload file
      if fun==1:
          for file in fileList:
            path=self.path3
            f2.storbinary('STOR %s'%(path+file),open(file,'rb'))
            print('%s uploading......'%(file))
      
      #delete file
      if fun==0:
          try:
              for file in fileList:
                path=self.path3
                f2.delete(path+file)
                print('%s delete......'%(file))
          except ftplib.error_perm:
              print('no file to delete!!')
              return
      
      f2.quit()
    
    def test(self):
      
      f1.cwd(self.path2)
      f2.cwd(self.path3)
      fileList=f1.nlst()
      print(fileList)
      
      for file in fileList:
        print('transfer %s......'%(file))
        f1.voidcmd('TYPE I')
        f2.voidcmd('TYPE I')
        sock1=f1.transfercmd('RETR %s'%(file))
        sock2=f2.transfercmd('STOR %s'%(file))
    
        while 1:
      
            data=sock1.recv(1024)
            sock2.sendall(data)
            
            if len(data)==0:
              break
        # 數(shù)據(jù)發(fā)送完成后需關(guān)閉socket,服務(wù)器21端口才會有返回    
        sock1.close()
        sock2.close()
            
                          
        res1=f1.getresp()
        #print('f1 >> %s'%(res1))
        res2=f2.getresp()
        #print('f2 >> %s'%(res2))    
                   
      f1.quit()
      f2.quit()

    
if __name__=='__main__':
  ftptest=myFTP() 
  ftptest.ftpU(0)
  #ftptest.test()
  #ftptest.ftpD()</pre><p align=center>另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、<a href=高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:Python實現(xiàn)FTP文件傳輸?shù)膶嵗?創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://vcdvsql.cn/article24/ejsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)軟件開發(fā)服務(wù)器托管網(wǎng)站設(shè)計公司商城網(wǎng)站關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)