鱼C论坛

 找回密码
 立即注册
查看: 3084|回复: 2

Python 3.7.3,请问如何往FTP上传指定位置的一整个文件夹?

[复制链接]
发表于 2019-4-22 11:54:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 mchl.gao 于 2019-4-22 12:06 编辑

例如文件夹在C盘根目录下,名字是1,里面有不同格式的文件,但是再没有子文件夹了。要上传到FTP目录中的guest文件夹,guest的文件夹位置是/home/www/guest,权限是drwx-xr-x。我用别的FTP软件访问FTP,连接和上传下载都没有任何问题。

我开始的时候象下面这样写。



  1. import ftplib

  2. def ftpconnect():
  3.     ftp_server = '192.168.1.21'
  4.     username = '1234567'
  5.     password = '123456789'
  6.     timeout = 30
  7.     port = 21

  8. ftp = ftplib.FTP()
  9. ftp.set_debuglevel(2)

  10. def uploadfile_to_FTP():
  11.     ftp = ftpconnect()

  12. bufsize = 1024
  13. for filename in os.listdir(r"C:/1/"):
  14.     remotepath = "/home/www/guest"+filename
  15.     localpath = "C:/1/"+filename
  16.     fp = open(localpath, 'rb')
  17.     ftp.storbinary('STOR ' + remotepath, fp, bufsize)

  18. ftp.set_debuglevel(0)
  19. fp.close()
  20. ftp.quit()

复制代码



运行后无法开始上传,报错提示如下:
=================== RESTART: H:\my software\ftpbackup\test.py ===================
Traceback (most recent call last):
  File "H:/my software/ftpbackup/test.py", line 19, in <module>
    for filename in os.listdir(r"C:/1/"):
NameError: name 'os' is not defined
>>>

我以为是没有添加OS,然后把代码改成下面这样:



  1. import os
  2. import ftplib


  3. def ftpconnect():
  4.     ftp_server = '192.168.1.21'
  5.     username = '1234567'
  6.     password = '123456789'
  7.     timeout = 30
  8.     port = 21

  9. ftp = ftplib.FTP()
  10. ftp.set_debuglevel(2)

  11. def uploadfile_to_FTP():
  12.     ftp = ftpconnect()

  13. bufsize = 1024
  14. for filename in os.listdir(r"C:/1/"):
  15.     remotepath = "/home/www/guest"+filename
  16.     localpath = "C:/1/"+filename
  17.     fp = open(localpath, 'rb')
  18.     ftp.storbinary('STOR ' + remotepath, fp, bufsize)

  19. ftp.set_debuglevel(0)
  20. fp.close()
  21. ftp.quit()

复制代码



运行后还是无法开始上传,报错如下:
================= RESTART: H:\my software\ftpbackup\test.py =================
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
Traceback (most recent call last):
  File "H:\my software\ftpbackup\test.py", line 24, in <module>
    ftp.storbinary('STOR ' + remotepath, fp, bufsize)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 503, in storbinary
    self.voidcmd('TYPE I')
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 277, in voidcmd
    self.putcmd(cmd)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 199, in putcmd
    self.putline(line)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 194, in putline
    self.sock.sendall(line.encode(self.encoding))
AttributeError: 'NoneType' object has no attribute 'sendall'
>>>



请各位高手指教一下,到底是哪里出了问题。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-22 18:48:36 | 显示全部楼层
ftp传输文件不是直接发送文件都行了,你为什么要读取文件呢?
你发的代码的第二个版本的第24行,你把文件读取出来意义何在?

ps:我不知道ftplib模块怎么用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-22 20:35:01 | 显示全部楼层
谢谢提醒,我去掉了读文件的功能,可是还是不行。错误提示如下:

Traceback (most recent call last):
  File "H:/ms/ftpbackup/422.py", line 24, in <module>
    ftp.quit()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 665, in quit
    resp = self.voidcmd('QUIT')
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 277, in voidcmd
    self.putcmd(cmd)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 199, in putcmd
    self.putline(line)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 194, in putline
    self.sock.sendall(line.encode(self.encoding))
AttributeError: 'NoneType' object has no attribute 'sendall'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-15 09:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表