首页服务器python上传文件到服务器,如何把python代码上传到服务器上

python上传文件到服务器,如何把python代码上传到服务器上

编程之家2023-10-2364次浏览

大家好,今天给各位分享python上传文件到服务器的一些知识,其中也会对如何把python代码上传到服务器上进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

python上传文件到服务器,如何把python代码上传到服务器上

python bottle 怎么获得上传的文件

文件上传,需要注意的是前端html的form表单中,要添加 enctype="multipart/form-data"属性,否则无法上传文件。在后端,用request.files方法,获取到表单传上来的文件,首先把对象赋值给一个变量名,如upload,然后用save()的方法来保存到服务器中。upload.save(save_path,overwrite=True),save_path是保存文件的路径,overwrite=True是指如果服务器中已有同名文件存在,则覆盖。

文件上传代码:

[root@linuxyw bottle]# vim main.py

#/usr/bin/env python

#coding=utf-8

from bottle import route, run

python上传文件到服务器,如何把python代码上传到服务器上

from bottle import request

#定义上传路径

save_path='./upload'

#文件上传的HTML模板,这里没有额外去写html模板了,直接写在这里,方便点吧

@route('/upload')

def upload():

python上传文件到服务器,如何把python代码上传到服务器上

return'''

<html>

<head>

</head>

<body>

<form action"/upload" method="post" enctype="multipart/form-data">

<input type="file" name="data"/>

<input type="submit" value="Upload"/>

</form>

</body>

</html>

'''

#文件上传,overwrite=True为覆盖原有的文件,

#如果不加这参数,当服务器已存在同名文件时,将返回“IOError: File exists.”错误

@route('/upload', method='POST')

def do_upload():

upload= request.files.get('data')

upload.save(save_path,overwrite=True)#把文件保存到save_path路径下

return'ok'

run(host='0.0.0.0', port=8080, debug=True)

相关的演示,可自己运行上面代码

此外,上传的文件对象,还有这二个属性

filename:文件名

content_type:文件类型

如上面的代码,上传文件的时候,要获取文件名,就要用upload.filename,要获取文件类型就用upload.content_type。这二件很实用,一般要先修改上传的文件名后,再保存到服务器中,content_type则可以检测文件是什么类型的文件,如果符合我们的上传类型,才保存。

@route('/upload', method='POST')

def do_upload():

upload= request.files.get('data')

import os.path

name, ext= os.path.splitext(upload.filename)#用os.path.splitext方法把文件名和后缀相分离

upload.filename=''.join(('123',ext))#修改文件名

upload.save(save_path,overwrite=True)#把文件保存到save_path路径下

return u'上传成功原文件名是:%s文件后缀名是:%s\n修改后的文件名是:%s'%(name,ext,''.join(('123',ext)))

用浏览器上传文件banner5_6.jpg后,成功显示:

上传成功原文件名是:banner5_6文件后缀名是:.jpg修改后的文件名是:123.jpg

服务器文件结构:

[root@linuxyw bottle]# tree

.

├── main.py

├── upload

│├── 11.png

│├── 123.jpg

│└── 23.png

如何把python代码上传到服务器上

使用pip或easy_install可以管理和安装python的package包,实际上它们都是从pypi服务器中搜索和下载package的。目前在pypi服务器上,有超过三万多个package,同时还允许我们将自己的代码也上传发布到服务器上。这样,世界上的所有人都能使用pip或easy_install来下载使用我们的代码了。

具体步骤如下:

首先创建项目文件和setup文件。

目录文件结构如下:

project/

simpletest/

__init__.py

test.py

setup.py

假设项目文件只有一个simpletest包,里面有一个test.py文件。

创建的setup.py文件格式大致如下,其中,install_requires字段可以列出依赖的包信息,用户使用pip或easy_install安装时会自动下载依赖的包。详细的格式参考文档。

from setuptools import setup, find_packages

setup(

name='simpletest',

version='0.0.1',

keywords=('simple','test'),

description='just a simple test',

license='MIT License',

install_requires= ['simplejson>=1.1'],

author='yjx',

author_email='not@all.com',

packages= find_packages(),

platforms='any',

)

然后将代码打包。

打包只需要执行python

setup.py xxx命令即可,其中xxx是打包格式的选项,如下:

#以下所有生成文件将在当前路径下 dist目录中

python setup.py bdist_egg#生成easy_install支持的格式

python setup.py sdist#生成pip支持的格式,下文以此为例

发布到pypi。

发布到pypi首先需要注册一个账号,然后进行如下两步:

注册package。输入python setup.py register。

上传文件。输入python setup.py sdist upload。

安装测试

上传成功后,就可以使用pip来下载安装了。

另外,pypi还有一个测试服务器,可以在这个测试服务器上做测试,测试的时候需要给命令指定额外的"-r"或"-i"选项,如python

setup.py register-r"",python

setup.py sdist upload-r"",pip

install-i"" simpletest。

发布到测试服务器的时候,建议在linux或cygwin中发布,如果是在windows中,参考文档,需要生成.pypirc文件

用python写测试脚本,从本地传文件至ftp远程路径

转自:http://news.tuxi.com.cn/kf/article/jhtdj.htm

本文实例讲述了python实现支持目录FTP上传下载文件的方法。分享给大家供大家参考。具体如下:

该程序支持ftp上传下载文件和目录、适用于windows和linux平台。

#!/usr/bin/envpython

#-*-coding:utf-8-*-

importftplib

importos

importsys

classFTPSync(object):

conn=ftplib.FTP()

def__init__(self,host,port=21):

self.conn.connect(host,port)

deflogin(self,username,password):

self.conn.login(username,password)

self.conn.set_pasv(False)

printself.conn.welcome

deftest(self,ftp_path):

printftp_path

printself._is_ftp_dir(ftp_path)

#printself.conn.nlst(ftp_path)

#self.conn.retrlines('LIST./a/b')

#ftp_parent_path=os.path.dirname(ftp_path)

#ftp_dir_name=os.path.basename(ftp_path)

#printftp_parent_path

#printftp_dir_name

def_is_ftp_file(self,ftp_path):

try:

ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):

returnTrue

else:

returnFalse

exceptftplib.error_perm,e:

returnFalse

def_ftp_list(self,line):

list=line.split('')

ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):

self._is_dir=True

def_is_ftp_dir(self,ftp_path):

ftp_path=ftp_path.rstrip('/')

ftp_parent_path=os.path.dirname(ftp_path)

self.ftp_dir_name=os.path.basename(ftp_path)

self._is_dir=False

ifftp_path=='.'orftp_path=='./'orftp_path=='':

self._is_dir=True

else:

#thisuescallbackfunction,thatwillchange_is_dirvalue

try:

self.conn.retrlines('LIST%s'%ftp_parent_path,self._ftp_list)

exceptftplib.error_perm,e:

returnself._is_dir

returnself._is_dir

defget_file(self,ftp_path,local_path='.'):

ftp_path=ftp_path.rstrip('/')

ifself._is_ftp_file(ftp_path):

file_name=os.path.basename(ftp_path)

#如果本地路径是目录,下载文件到该目录

ifos.path.isdir(local_path):

file_handler=open(os.path.join(local_path,file_name),'wb')

self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)

file_handler.close()

#如果本地路径不是目录,但上层目录存在,则按照本地路径的文件名作为下载的文件名称

elifos.path.isdir(os.path.dirname(local_path)):

file_handler=open(local_path,'wb')

self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)

file_handler.close()

#如果本地路径不是目录,且上层目录不存在,则退出

else:

print'EROOR:Thedir:%sisnotexist'%os.path.dirname(local_path)

else:

print'EROOR:Theftpfile:%sisnotexist'%ftp_path

defput_file(self,local_path,ftp_path='.'):

ftp_path=ftp_path.rstrip('/')

ifos.path.isfile(local_path):

file_handler=open(local_path,"r")

local_file_name=os.path.basename(local_path)

#如果远程路径是个目录,则上传文件到这个目录,文件名不变

ifself._is_ftp_dir(ftp_path):

self.conn.storbinary('STOR%s'%os.path.join(ftp_path,local_file_name),file_handler)

#如果远程路径的上层是个目录,则上传文件,文件名按照给定命名

elifself._is_ftp_dir(os.path.dirname(ftp_path)):

print'STOR%s'%ftp_path

self.conn.storbinary('STOR%s'%ftp_path,file_handler)

#如果远程路径不是目录,且上一层的目录也不存在,则提示给定远程路径错误

else:

print'EROOR:Theftppath:%siserror'%ftp_path

file_handler.close()

else:

print'ERROR:Thefile:%sisnotexist'%local_path

defget_dir(self,ftp_path,local_path='.',begin=True):

ftp_path=ftp_path.rstrip('/')

#当ftp目录存在时下载

ifself._is_ftp_dir(ftp_path):

#如果下载到本地当前目录下,并创建目录

#下载初始化:如果给定的本地路径不存在需要创建,同时将ftp的目录存放在给定的本地目录下。

#ftp目录下文件存放的路径为local_path=local_path+os.path.basename(ftp_path)

#例如:将ftp文件夹a下载到本地的a/b目录下,则ftp的a目录下的文件将下载到本地的a/b/a目录下

ifbegin:

ifnotos.path.isdir(local_path):

os.makedirs(local_path)

local_path=os.path.join(local_path,os.path.basename(ftp_path))

#如果本地目录不存在,则创建目录

ifnotos.path.isdir(local_path):

os.makedirs(local_path)

#进入ftp目录,开始递归查询

self.conn.cwd(ftp_path)

ftp_files=self.conn.nlst()

forfileinftp_files:

local_file=os.path.join(local_path,file)

#如果fileftp路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)

#如果fileftp路径是文件则直接上传文件

ifself._is_ftp_dir(file):

self.get_dir(file,local_file,False)

else:

self.get_file(file,local_file)

#如果当前ftp目录文件已经遍历完毕返回上一层目录

self.conn.cwd("..")

return

else:

print'ERROR:Thedir:%sisnotexist'%ftp_path

return

defput_dir(self,local_path,ftp_path='.',begin=True):

ftp_path=ftp_path.rstrip('/')

#当本地目录存在时上传

ifos.path.isdir(local_path):

#上传初始化:如果给定的ftp路径不存在需要创建,同时将本地的目录存放在给定的ftp目录下。

#本地目录下文件存放的路径为ftp_path=ftp_path+os.path.basename(local_path)

#例如:将本地文件夹a上传到ftp的a/b目录下,则本地a目录下的文件将上传的ftp的a/b/a目录下

ifbegin:

ifnotself._is_ftp_dir(ftp_path):

self.conn.mkd(ftp_path)

ftp_path=os.path.join(ftp_path,os.path.basename(local_path))

#如果ftp路径不是目录,则创建目录

ifnotself._is_ftp_dir(ftp_path):

self.conn.mkd(ftp_path)

#进入本地目录,开始递归查询

os.chdir(local_path)

local_files=os.listdir('.')

forfileinlocal_files:

#如果file本地路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)

#如果file本地路径是文件则直接上传文件

ifos.path.isdir(file):

ftp_path=os.path.join(ftp_path,file)

self.put_dir(file,ftp_path,False)

else:

self.put_file(file,ftp_path)

#如果当前本地目录文件已经遍历完毕返回上一层目录

os.chdir("..")

else:

print'ERROR:Thedir:%sisnotexist'%local_path

return

if__name__=='__main__':

ftp=FTPSync('192.168.1.110')

ftp.login('test','test')

#上传文件,不重命名

#ftp.put_file('111.txt','a/b')

#上传文件,重命名

#ftp.put_file('111.txt','a/112.txt')

#下载文件,不重命名

#ftp.get_file('/a/111.txt',r'D:\\')

#下载文件,重命名

#ftp.get_file('/a/111.txt',r'D:\112.txt')

#下载到已经存在的文件夹

#ftp.get_dir('a/b/c',r'D:\\a')

#下载到不存在的文件夹

#ftp.get_dir('a/b/c',r'D:\\aa')

#上传到已经存在的文件夹

ftp.put_dir('b','a')

#上传到不存在的文件夹

ftp.put_dir('b','aa/B/')

希望本文所述对大家的Python程序设计有所帮助。

以下转自:http://blog.csdn.net/linda1000/article/details/8255771

Python中的ftplib模块

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件

FTP的工作流程及基本操作可参考协议RFC959

ftp登陆连接

from ftplib import FTP#加载ftp模块

ftp=FTP()#设置变量

ftp.set_debuglevel(2)#打开调试级别2,显示详细信息

ftp.connect("IP","port")#连接的ftp sever和端口

ftp.login("user","password")#连接的用户名,密码

print ftp.getwelcome()#打印出欢迎信息

ftp.cmd("xxx/xxx")#更改远程目录

bufsize=1024#设置的缓冲区大小

filename="filename.txt"#需要下载的文件

file_handle=open(filename,"wb").write#以写模式在本地打开文件

ftp.retrbinaly("RETR filename.txt",file_handle,bufsize)#接收服务器上文件并写入本地文件

ftp.set_debuglevel(0)#关闭调试模式

ftp.quit#退出ftp

ftp相关命令操作

ftp.cwd(pathname)#设置FTP当前操作的路径

ftp.dir()#显示目录下文件信息

ftp.nlst()#获取目录下的文件

ftp.mkd(pathname)#新建远程目录

ftp.pwd()#返回当前所在位置

ftp.rmd(dirname)#删除远程目录

ftp.delete(filename)#删除远程文件

ftp.rename(fromname, toname)#将fromname修改名称为toname。

ftp.storbinaly("STOR filename.txt",file_handel,bufsize)#上传目标文件

ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件

网上找到一个具体的例子:

#例:FTP编程

fromftplibimportFTP

ftp=FTP()

timeout=30

port=21

ftp.connect('192.168.1.188',port,timeout)#连接FTP服务器

ftp.login('UserName','888888')#登录

printftp.getwelcome()#获得欢迎信息

ftp.cwd('file/test')#设置FTP路径

list=ftp.nlst()#获得目录列表

fornameinlist:

print(name)#打印文件名字

path='d:/data/'+name#文件保存路径

f=open(path,'wb')#打开要保存文件

filename='RETR'+name#保存FTP文件

ftp.retrbinary(filename,f.write)#保存FTP上的文件

ftp.delete(name)#删除FTP文件

ftp.storbinary('STOR'+filename,open(path,'rb'))#上传FTP文件

ftp.quit()#退出FTP服务器

完整的模板:

#!/usr/bin/python

#-*-coding:utf-8-*-

importftplib

importos

importsocket

HOST='ftp.mozilla.org'

DIRN='pub/mozilla.org/webtools'

FILE='bugzilla-3.6.7.tar.gz'

defmain():

try:

f=ftplib.FTP(HOST)

except(socket.error,socket.gaierror):

print'ERROR:cannotreach"%s"'%HOST

return

print'***Connectedtohost"%s"'%HOST

try:

f.login()

exceptftplib.error_perm:

print'ERROR:cannotloginanonymously'

f.quit()

return

print'***Loggedinas"anonymously"'

try:

f.cwd(DIRN)

exceptftplib.error_perm:

print'ERRORLcannotCDto"%s"'%DIRN

f.quit()

return

print'***Changedto"%s"folder'%DIRN

try:

#传一个回调函数给retrbinary()它在每接收一个二进制数据时都会被调用

f.retrbinary('RETR%s'%FILE,open(FILE,'wb').write)

exceptftplib.error_perm:

print'ERROR:cannotreadfile"%s"'%FILE

os.unlink(FILE)

else:

print'***Downloaded"%s"toCWD'%FILE

f.quit()

return

if__name__=='__main__':

main()

OK,本文到此结束,希望对大家有所帮助。

服务器打不开 服务器为什么打不开服务器 香港 什么是香港服务器