标签: ftplib

我可以使用Python将内存中的对象上传到FTP吗?

这就是我现在正在做的事情:

mysock = urllib.urlopen('http://localhost/image.jpg')
fileToSave = mysock.read()
oFile = open(r"C:\image.jpg",'wb')
oFile.write(fileToSave)
oFile.close
f=file('image.jpg','rb')
ftp.storbinary('STOR '+os.path.basename('image.jpg'),f)
os.remove('image.jpg')
Run Code Online (Sandbox Code Playgroud)

将文件写入磁盘然后立即删除它们似乎是应该避免的系统上的额外工作.我可以使用Python将内存中的对象上传到FTP吗?

python ftp upload object ftplib

3
推荐指数
1
解决办法
1724
查看次数

Python ftplib和storbinary

试图了解其ftplib工作原理.

我正在尝试将文件保存到FTP服务器并实现回调.

文件说:

FTP.storbinary(command, file[, blocksize, callback, rest])
Run Code Online (Sandbox Code Playgroud)

callback 函数定义如文档中所示:

为每个接收到的数据块调用回调函数,使用单个字符串参数给出数据块.

我该如何实现这个回调?retrbinary(读取文件)上的示例回调可能如下所示:

def handle(block):
    f.write(block)
    print ".", 
Run Code Online (Sandbox Code Playgroud)

这将显示正在下载的文件的进度,f即文件对象.

但我对如何实现这一点感到茫然storbinary.

有关如何做到这一点的任何建议?我知道block参数,但如何通过上传调整?

更新:

我有一个回调上传为:

def handle(block):
    f.read(block)
    print ".",
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,它给出了错误:

an integer is required

传球int(block)也行不通.

python ftplib

3
推荐指数
1
解决办法
1万
查看次数

ftplib:被动和 NAT/地址转换

有没有办法检测服务器在进入被动模式时返回其专用网络地址,并将其转换为其公共地址?
我无权访问服务器。

>>> # Python 2.7.3rc2
>>> from ftplib import FTP_TLS
>>> ftps = FTP_TLS()
>>> ftps.set_debuglevel(2)
>>> ftps.connect("example.com", 123)
*get* '220 Welcome to Synchrony Gateway FTP server\r\n'
*resp* '220 Welcome to Synchrony Gateway FTP server'
'220 Welcome to Synchrony Gateway FTP server'

>>> ftps.auth()
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 Using authentication type TLS\r\n'
*resp* '234 Using authentication type TLS'
'234 Using authentication type TLS'

>>> ftps.login("foo", "***")
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH …
Run Code Online (Sandbox Code Playgroud)

python ftplib python-2.7

3
推荐指数
1
解决办法
2129
查看次数

python ftplib奇怪的行为

尝试使用ftplib连接到ftp服务器时,我遇到了一些非常奇怪的行为.我在做的是:

import ftplib
ftp = ftplib.FTP('my-ftp-server')
ftp.login('user ', 'pass')
Run Code Online (Sandbox Code Playgroud)

现在,如果我从python解释器运行它,它工作正常,我得到:

'230 Login successful.'
Run Code Online (Sandbox Code Playgroud)

但我想用一个可以为我做的东西很好的脚本.当我把这些全部放在一些python脚本中并运行时:

 python my_ftp_stuff.py
Run Code Online (Sandbox Code Playgroud)

我明白了:

 ftplib.error_perm: 530 Login incorrect.
Run Code Online (Sandbox Code Playgroud)

我真的无能为力导致这种奇怪的行为.有没有人有什么提示尝试?

最好的祝福

python ftplib

3
推荐指数
1
解决办法
1672
查看次数

Python ftplib:使用 python ftplib 时下载和上传速度低

我想知道是否有人观察到,与通过 Windows 命令提示符执行 FTP 获取/放置或使用 Perl 的Net::FTP模块相比,使用 Python 的ftplib通过 ftp 下载或上传文件所花费的时间非常长。

我创建了一个类似于http://code.activestate.com/recipes/521925-python-ftp-client/的简单 FTP 客户端,但是我无法达到在 Windows DOS 提示符下运行 FTP 或使用 perl 时获得的速度. 是我遗漏了什么还是Python ftplib 模块有问题。

如果您能说明为什么我使用 Python 的吞吐量很低,我将不胜感激。

python ftp ftplib throughput

3
推荐指数
1
解决办法
2490
查看次数

通过ftp创建文件的日期

美好的一天!

如何通过ftp获取文件的创建日期?我使用web2py,python,ftplib和filezilla作为ftp服务器.我可以通过f.sendcmd('MDTM'+ filename)获取修改日期.

有什么建议?谢谢!

python filezilla web2py ftplib

3
推荐指数
1
解决办法
5682
查看次数

Python,将数据添加到服务器上的文件怎么样?

我每隔6秒将值附加到一个日志文件中.每30秒我将此日志作为文件传输到服务器.但是,我只想将收集的数据附加到我服务器上的文件中,而不是传输整个文件.我无法弄清楚如何打开服务器文件,然后附加值.我的代码到目前为止:

session = ftplib.FTP(authData[0],authData[1],authData[2])
session.cwd("//"+serverCatalog()+"//") # open server catalog
file = open(fileName(),'rb')

with open(fileName(), 'rb') as f:
     f = f.readlines()
         for line in f:
             collected = line

           # In some way open server file, write lines to it
           session.storbinary('STOR ' + fileName(), open(fileName(), 'a'), 1024)
           file.close()
           session.quit()
Run Code Online (Sandbox Code Playgroud)

相反,我是否必须打开并附加服务器文件,然后将其发回?不要问我为什么不将记录的数据直接发送到数据库;)

以上是我的问题,完全解决方案

session.cwd("//"+serverCatalog()+"//") # open server catalog
localfile = open("logfile.txt",'rb')
session.storbinary('APPE serverfile.txt', localfile)
localfile.close()
Run Code Online (Sandbox Code Playgroud)

python append ftplib

3
推荐指数
1
解决办法
1201
查看次数

socket.gaierror: [Errno 8] nodename 或 servname 提供,或未知

我正在尝试在运行 OS X Yosemite (10.10.5) 的 Mac 上使用以下 Python 脚本连接到我的 ftp 服务器:

from ftplib import FTP
import ConfigParser

config_file = "ftp.config"
config = ConfigParser.ConfigParser()
try:
    config.read(config_file)
except:
    raise Exception("Failed reading {} file.").format(config_file)

server_address  = config.get("main", "server")
user_name = config.get("main", "user_name")
password  = config.get("main", "password")

ftp = FTP(server_address)
ftp.login(user_name, password)
print "Logging in as '{}'".format(user_name)
Run Code Online (Sandbox Code Playgroud)

该脚本从文件“ftp.config”中获取服务器信息,内容如下:

[main]
enable      =   1
server      =   "my.ftp.address"
user_name   =   "some_user_name"
password    =   "some_password"
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,出现以下错误:

Traceback (most recent call last):  
    File "ftp2.py", line 34, in <module> …
Run Code Online (Sandbox Code Playgroud)

ftp ftplib configparser python-2.7

3
推荐指数
1
解决办法
1万
查看次数

Ftplib ConnectionRefusedError:[Errno 111]连接被拒绝(python 3.5)

我有一个应该连接到 FTP 的脚本

from ftplib import FTP

with FTP('IP') as ftp:
   ftp.login(user='my user', passwd='my password')
   ftp.cwd('/MY_DIR')
   ftp.dir()
Run Code Online (Sandbox Code Playgroud)

我有一个错误: ConnectionRefusedError: [Errno 111] Connection refused


ftp是带有vsftpd的EC2

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=IP
pasv_addr_resolve=YES
Run Code Online (Sandbox Code Playgroud)

已经尝试过:

该代码可在带或不带 TLS 的其他 FTP 上运行(托管在 1and1、OVH...)


我在 NodeJS 中尝试了这个脚本

const ftpClient = require('ftp-client');

const client = new ftpClient({
   host: "IP",
   port: 21,
   user: "My user", // defaults to "anonymous"
   password: "My password" // defaults to "@anonymous"
});

client.connect(() => {

  client.download('/MY_DIR/file','/tmp/file', (res) => {
        console.log(res)
  })
});
Run Code Online (Sandbox Code Playgroud)

工作得很好,所以我排除了防火墙问题


我尝试过启用 TLS …

python ftp ftplib python-3.x

3
推荐指数
1
解决办法
5868
查看次数

带有 FTPS 的 ftplib storbinary 挂起/从未完成

我正在尝试使用 FTPS 将文件上传到 FTP 站点,但是当我尝试存储文件时,它只是在文件完全传输后挂起。

global f_blocksize
global total_size
global size_written
f_blocksize = 1024
total_size = os.path.getsize(file_path)
size_written = 0
file = open(file_path, "rb")
try:
    ftps = FTP_TLS("ftp.example.com")
    ftps.auth()
    ftps.sendcmd("USER username")
    ftps.sendcmd("PASS password")
    ftps.prot_p()
    print(ftps.getwelcome())

    try:
        print("File transfer started...")
        ftps.storbinary("STOR myfile.txt", file, callback=handle, blocksize=f_blocksize)
        print("File transfer complete!")
    except OSError as ex:
        print(ftps.getresp())
except Exception as ex:
    print("FTP transfer failed.")
    print("%s: %s" %(type(ex), str(ex)))

def handle(block):
    global size_written
    global total_size
    global f_blocksize
    size_written = size_written + f_blocksize if size_written + f_blocksize …
Run Code Online (Sandbox Code Playgroud)

python ftp ssl ftps ftplib

3
推荐指数
1
解决办法
1772
查看次数