这就是我现在正在做的事情:
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吗?
试图了解其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 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) 尝试使用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)
我真的无能为力导致这种奇怪的行为.有没有人有什么提示尝试?
最好的祝福
我想知道是否有人观察到,与通过 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 的吞吐量很低,我将不胜感激。
美好的一天!
如何通过ftp获取文件的创建日期?我使用web2py,python,ftplib和filezilla作为ftp服务器.我可以通过f.sendcmd('MDTM'+ filename)获取修改日期.
有什么建议?谢谢!
我每隔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) 我正在尝试在运行 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 的脚本
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 …
我正在尝试使用 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) ftplib ×10
python ×9
ftp ×5
python-2.7 ×2
append ×1
configparser ×1
filezilla ×1
ftps ×1
object ×1
python-3.x ×1
ssl ×1
throughput ×1
upload ×1
web2py ×1