栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Linux环境下使用Python启动上传下载服务

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux环境下使用Python启动上传下载服务

一般linux环境下都有python2.7,所以,本文以python2.7环境为基础,编写上传下载服务

使用下面的命令即可运行该脚本,监听8000端口

python2.7 ./updown.py 8000

脚本内容如下

#!/bin/env python2
# coding=utf-8
import os
import cgi
import sys
import urllib
import urlparse
import platform
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

upload_page = '''



    Upload
    


    
    






''' directory_page = ''' Download List
    __LIST__
''' class PostHandler(SimpleHTTPRequestHandler): 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(upload_page) return path = self.translate_path(self.path[5:]) parts = urlparse.urlsplit(self.path) if parts.path.endswith('/'): try: curr_dir = os.listdir(path) except os.error: self.send_error(404, "No permission to list directory") return curr_dir.sort(key=lambda a: a.lower()) href_list = list() href_li = '
  • %s
  • ' for name in curr_dir: if platform.system().lower() == 'windows': name = name.decode('gbk').encode('utf-8') fullname = os.path.join(path, name) if os.path.isdir(fullname): href_list.append(href_li % (urllib.quote(name + '/'), cgi.escape(name + '/'))) elif os.path.islink(fullname): href_list.append(href_li % (urllib.quote(name + '@'), cgi.escape(name))) else: href_list.append(href_li % (urllib.quote(name), cgi.escape(name))) self.send_response(200) self.send_header("Content-type", "text/html;charset=utf-8") self.end_headers() self.wfile.write(directory_page.replace('__LIST__', ''.join(href_list))) return if not os.path.isdir(path): try: if platform.system().lower() == 'windows': path = path.decode('utf-8').encode('gbk') with open(path, 'rb') as f: fs = os.fstat(f.fileno()) self.send_response(200) self.send_header("Content-type", "application/force-download") self.send_header("Content-Length", str(fs[6])) self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) self.end_headers() self.copyfile(f, self.wfile) return except IOError, e: self.send_error(404, "File not found: " + str(e)) return self.send_response(301) new_parts = (parts[0], parts[1], parts[2] + '/', parts[3], parts[4]) new_url = urlparse.urlunsplit(new_parts) self.send_header("Location", new_url) self.end_headers() def do_POST(self): form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data'} ) self.send_response(200) self.send_header("Content-type", "text/html;charset=utf-8") self.end_headers() if form['file'].filename: with open('./' + os.path.basename(form['file'].filename), 'wb') as f: f.write(form['file'].file.read()) if __name__ == '__main__': if sys.argv[1:]: port = int(sys.argv[1]) else: port = 8000 server_address = ('', port) PostHandler.protocol_version = "HTTP/1.0" httpd = HTTPServer(server_address, PostHandler) sa = httpd.socket.getsockname() print "Serving HTTP on", sa[0], "port", sa[1], "..." httpd.serve_forever()
    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/965704.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号