1 任务内容: 使用任何语言或脚本,写一个最简单的支持文件上传的WebServer。
2 任务的难度: 三星
3 任务的目的: 学习 Linux 下编程
4 任务所涉及的软件: 任何语言
5 任务将大致消耗的时间: 1天
[三星]写一个最简单的支持文件上传的WebServer
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [三星]写一个最简单的支持文件上传的WebServer
抛砖引玉
运行后,在网页访问 http://127.0.0.1:8080 测试
代码: 全选
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# (c) UbuntuChina, http://www.ubuntu.org.cn
# (c) free software, GPLv3
# Connect: oneleaf@gmail.com
import BaseHTTPServer,SocketServer, cgi
from os import curdir,sep, path
uploadhtml='''<html><body>
<p>批量文件上传</p>
<form enctype="multipart/form-data" action="/" method="post">
<p>File: <input type="file" name="file1"></p>
<p>File: <input type="file" name="file2"></p>
<p>File: <input type="file" name="file3"></p>
<p>File: <input type="file" name="file4"></p>
<p>File: <input type="file" name="file5"></p>
<p><input type="submit" value="上传"></p>
</form>
</body></html>'''
class WebHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
if self.path=='/':
self.send_response(200)
self.send_header('Content-Type','text/html; charset=utf-8')
self.end_headers()
self.wfile.write(uploadhtml)
return
try:
f = open(curdir+sep+self.path)
self.send_response(200)
self.end_headers()
self.wfile.write(f.read())
f.close()
except IOError:
self.send_error(404,'File Not Found: %s' % self.path)
def do_POST(self):
form = cgi.FieldStorage(fp=self.rfile,headers=self.headers,environ={'REQUEST_METHOD':'POST','CONTENT_TYPE':self.headers['Content-Type'],})
self.send_response(200)
self.send_header('Content-Type','text/html; charset=utf-8')
self.end_headers()
self.wfile.write('<Html>上传完毕。<br/><br/>');
self.wfile.write('客户端: %s<br/>' % str(self.client_address))
for field in form.keys():
field_item = form[field]
if field_item.filename:
fn=curdir+sep+field_item.filename
if path.exists(fn):
self.wfile.write('文件 <a href="%s">%s</a> 已经存在,忽略上传。<br/>' % (field_item.filename,field_item.filename))
else:
upfile=open(fn,'w')
file_data=field_item.file.read()
upfile.write(file_data);
upfile.close()
file_len = len(file_data)
del file_data
self.wfile.write('文件 <a href="%s">%s</a> 成功上传,尺寸为:%d bytes<br/>' % (field_item.filename,field_item.filename,file_len))
self.wfile.write('</html>')
class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer): pass
if __name__ == '__main__':
server_address = ('0.0.0.0', 8080)
httpd = ThreadingHTTPServer(server_address, WebHandler)
print "Web Server On %s:%d" % server_address
httpd.serve_forever()
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [三星]写一个最简单的支持文件上传的WebServer
应该是手机的浏览器禁止了upload
- zkwlx
- 帖子: 989
- 注册时间: 2009-10-09 12:54
- 系统: debian
- 来自: 北京某胡同
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
Re: [三星]写一个最简单的支持文件上传的WebServer
perl -MHTTP::Server::Simple -e 'HTTP::Server::Simple->new->run'
谁会it的,会cgi的,也写一个。我在边上打气。
或者叶子出一个基于那cherokee的方法教程 。
谁会it的,会cgi的,也写一个。我在边上打气。
或者叶子出一个基于那cherokee的方法教程 。
● 鸣学
- rgwan
- 帖子: 264
- 注册时间: 2009-08-24 19:30
- 联系:
Re: [三星]写一个最简单的支持文件上传的WebServer
PHP也一样~用nginx写eexpress 写了:perl -MHTTP::Server::Simple -e 'HTTP::Server::Simple->new->run'
谁会it的,会cgi的,也写一个。我在边上打气。
或者叶子出一个基于那cherokee的方法教程 。
CPU Intel Pentium E6500K(倍频超到13)
主板 MSI G41M-P21
内存 金邦2G DDR3 1333 金士顿 2G DDR3 1333 (降到1066)
硬盘 老三星60G(系统盘) 日立1T 数据盘
显卡 蓝宝石 HD5550 二代 256M GD5
电源 联想航嘉 228W “大”功率电源(汗)
键盘鼠标 联想
机箱 联想
显示器 联想!
操作系统 ubuntu maverick.
欢迎大家到我的小站:http://www.rwzy.co.cc
主板 MSI G41M-P21
内存 金邦2G DDR3 1333 金士顿 2G DDR3 1333 (降到1066)
硬盘 老三星60G(系统盘) 日立1T 数据盘
显卡 蓝宝石 HD5550 二代 256M GD5
电源 联想航嘉 228W “大”功率电源(汗)
键盘鼠标 联想
机箱 联想
显示器 联想!
操作系统 ubuntu maverick.
欢迎大家到我的小站:http://www.rwzy.co.cc
-
- 帖子: 23
- 注册时间: 2011-01-04 11:49
Re: [三星]写一个最简单的支持文件上传的WebServer
这个不是依然用的http类库么
我还以为是指用socket直接监听端口,然后实现基本的request和response,额外再加上一个文件上传。
看任务的意思,连上传文件的界面都没要求,所以连http协议都不需要实现的,主要就是一个unix/socket编程。
看来是我多想了。
我还以为是指用socket直接监听端口,然后实现基本的request和response,额外再加上一个文件上传。
看任务的意思,连上传文件的界面都没要求,所以连http协议都不需要实现的,主要就是一个unix/socket编程。
看来是我多想了。
-
- 帖子: 7
- 注册时间: 2012-04-18 22:04
Re: [三星]写一个最简单的支持文件上传的WebServer
看了楼主的代码,我觉得自己想多了。