百度空间上的背景音乐时不时会更新下,每次都是通过FlashFXP上传的。又是登录,又是选择目录的,着实麻烦。于是写了这个小工具。
开发环境:Eclipse3.2+Pydev+Python2.4
技术上,没有太多的新意,几乎就是ftplib的基础应用。在开发方式上,通过写“死”的测试Demo,抽取出“活”的部分。整个迭代过程,比较自然。思路会随着写的过程,逐渐清晰。一些在设计之初没考虑到的细节部分,也会中途逐渐显现。
主要功能有三个。list,显示ftp站点某目录的内容;download,下载文件到指定目录下;upload,上传文件到指定目录下。
还是看代码,比较简单。一定程度上,考虑到了程序的可扩展性。
conf/config.xml:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
configuration
>
3
<
host
>
10.0.0.1
</
host
>
4
<
user
>
username
</
user
>
5
<
password
>
password
</
password
>
6
</
configuration
>
modules/parseConf.py:
1
#
Programmer: qixiang
2
#
E-mail: mail2qixiang AT gmail DOT com
3
#
4
#
Copyleft 2006 qixiang
5
#
6
#
modules/parseConf.py 2006-11-19 03:56:15 qixiang
7
8
def
getNodeValue(filename, nodename):
9
from
xml.dom
import
minidom
10
xmldoc
=
minidom.parse(filename)
11
nodeValue
=
xmldoc.getElementsByTagName(nodename)[0].firstChild.data
12
return
nodeValue
modules/handleFTP.py:
1
#
Programmer: qixiang
2
#
E-mail: mail2qixiang AT gmail DOT com
3
#
4
#
Copyleft 2006 qixiang
5
#
6
#
modules/handleFTP.py 2006-11-19 04:04:25 qixiang
7
8
from
ftplib
import
FTP
9
def
login(host, user, password):
10
try
:
11
ftp
=
FTP(host)
12
#
print 'connect successfully'
13
try
:
14
ftp.login(user
=
user, passwd
=
password)
15
#
print 'login successfully'
16
return
ftp
17
except
:
18
print
'
incorrect user or password
'
19
except
:
20
print
'
unconnected host
'
21
22
def
list(ftp, ftpDirectory):
23
try
:
24
ftp.cwd(ftpDirectory)
25
ftp.retrlines(
'
LIST
'
)
26
ftp.close()
27
except
:
28
print
'
incorrect directory
'
29
30
def
upload(ftp, remoteFile, localFile):
31
try
:
32
ftp.storlines(
'
STOR
'
+
remoteFile, open(localFile))
33
print
'
upload successfully
'
34
print
35
ftp.retrlines(
'
LIST
'
)
36
ftp.close()
37
except
:
38
print
'
incorrect remoteFile or localFile
'
39
40
def
download(ftp, remoteFile, localFile):
41
try
:
42
ftp.retrlines(
'
RETR
'
+
remoteFile, open(localFile,
"
w
"
).write)
43
print
'
download successfully
'
44
print
45
ftp.retrlines(
'
LIST
'
)
46
ftp.close()
47
except
:
48
print
'
incorrect remoteFile or localFile
'
ftp.py
:
1
#
Programmer: qixiang
2
#
E-mail: mail2qixiang AT gmail DOT com
3
#
4
#
Copyleft 2006 qixiang
5
#
6
#
ftp.py 2006-11-19 04:04:54 qixiang
7
8
import
sys
9
from
modules.parseConf
import
getNodeValue
10
from
modules.handleFTP
import
login, list, upload, download
11
12
configFile
=
'
conf/config.xml
'
13
flag
=
sys.argv[
1
]
14
ftp
=
login(getNodeValue(configFile,
'
host
'
), getNodeValue(configFile,
'
user
'
), getNodeValue(configFile,
'
password
'
))
15
16
if
flag
==
'
list
'
:
17
list(ftp, sys.argv[
2
])
18
if
flag
==
'
upload
'
:
19
upload(ftp, sys.argv[
2
], sys.argv[
3
])
20
if
flag
==
'
download
'
:
21
download(ftp, sys.argv[
2
], sys.argv[
3
])
命令行下运行:
1. list
python ftp.py list ftp目录名
eg. python ftp.py list music
2. upload
python ftp.py upload 上传所要保存的ftp目录文件名 待上传的本地文件
eg. python ftp.py upload music\remote.xml c:\local.xml
3. download
python ftp.py download 待下载的远程文件 下载所要保存的本地目录文件名
eg. python ftp.py download music\remote.xml c:\local.xml
我个人是将实现upload功能的命令,保存成一个批处理文件。需要的时候,运行下就OK了。
upload.bat:
d:
cd java/eclipse/workspace/ftp
python ftp.py upload music\mp3player.xml f:\website\music\mp3player.xml
功能比较单一,还有许多欠考虑的地方。例如对上传文件类型的判断,对上传、下载文件所在目录存在与否的判断,等等。
小的东西,如果深究,也蛮有意思。
ps: 程序目录及copyleft部分借鉴了limodou的Ulipad,在此表感谢。