我找不到如何在python中设置http服务器的示例,该服务器将文件保存到使用带有urllib2,请求或卷曲的HTTP POST发送给它的目录。
我想将它用作客户端分析数据的程序的一部分,并将结果文件发送回服务器。服务器将文件保存到分析结果的目录中。
由于
答案 0 :(得分:0)
我最近使用Python中的CGI模块做了这个。
我的POST方法和文件复制过程如下。
它使用一个表单,其中sfname
是文件必须保存的完整路径,file
是文件本身。这比你需要的要复杂一点,但它应该让你前进。
def do_POST(self):
f = StringIO()
fm = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST'})
if "file" in fm:
r, resp, info = self.get_file_data(fm)
print r, info, "by: ", self.client_address
if r:
f.write("File upload successful: %s" % info)
f.seek(0)
if resp == 200:
# Do stuff here
else:
# Error handle here
else:
f.write("File upload failed: %s" % info)
f.seek(0)
if resp == 200:
# Do stuff here
else:
# Error handle here
if f:
copyfileobj(f, self.wfile)
f.close()
else:
# Error handle here
def get_file_data(self, form):
fn = form.getvalue('sfname')
fpath, fname = ospath.split(fn)
if not ospath.isabs(fpath):
return (False, 400, "Path of filename on server is not absolute")
if not ospath.isdir(fpath):
return (False, 400, "Cannot find directory on server to place file")
try:
out = open(fn, 'wb')
except IOError:
return (False, 400, "Can't write file at destination. Please check permissions.")
out.write(form['file'].file.read())
return (True, 200, "%s ownership changed to user %s" % (fn, u))
此外,这是我导入的软件包。你可能不需要所有这些。
from shutil import copyfileobj
from os import path as ospath
import cgi,
import cgitb; cgitb.enable(format="text")
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
我用curl -F "file=@./myfile.txt" -F "sfname=/home/user/myfile.txt" http://myserver
进行了测试,效果很好。不能保证其他方法。希望这会有所帮助。