#!/usr/bin/python2 # -*- coding:utf-8 -*- #========================================= # Filename : transfer.py # Author : Colben # Create : 2017-05-11 12:27 #========================================= import os, sys, platform import shutil import re import time import zipfile import BaseHTTPServer, HTMLParser import requests, mimetypes, base64 from SocketServer import ThreadingMixIn from threading import Thread reload(sys) sys.setdefaultencoding("utf-8") try: from cStringIO import StringIO except ImportError: from StringIO import StringIO KEY = base64.b64encode('lijc:lijc') AUTH = ('lijc', 'lijc') URLS = [] THREAD_RESULT = {} def sizeof_fmt(num):# <>FOLD>> def modification_date(filename): return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(filename))) def handle_attachment(filename, user_agent):# <>FOLD>> def sync_file(url, filename):# <>FOLD>> class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):# <>FOLD>> def do_GET(self):# <>FOLD>> def do_HEAD(self):# <>FOLD>> def do_AUTHHEAD(self):# <>FOLD>> def do_POST(self):# <') f.write('\nUpload Result\n') f.write('\n') f.write('\n

Upload Result

\n') f.write('\n
返回上级  返回首页') f.write('
\n') if r: f.write('Success:') else: f.write('Failed:') f.write(info) self.send_footer(f) length = f.tell() f.seek(0) self.send_response(200) self.send_header("Content-type", "text/html") self.send_header("Content-Length", str(length)) if self.headers['user-agent'] == 'upload/sync': self.send_header("Sync-Result", info) self.end_headers() if f: self.copyfile(f, self.wfile) f.close()# >>FOLD>> def deal_post_data(self):# < 0: line = self.rfile.readline() remainbytes -= len(line) if boundary in line: preline = preline[0:-1] if preline.endswith('\r'): preline = preline[0:-1] out.write(preline) out.close() if os.path.dirname(fn).endswith('/attachment'): return handle_attachment(fn, self.headers['user-agent']) else: return (True, "File '%s' upload success!" % os.path.basename(fn)) else: out.write(preline) preline = line return (False, "Unexpect Ends of data.")# >>FOLD>> def send_head(self):# <>FOLD>> def list_directory(self, path):# <') f.write('\nDirectory %s\n' % displaypath) f.write('\n') f.write('') f.write('\n\n\n

当前位置: %s

\n' % displaypath) if '/' != self.path: f.write('\n返回上级  返回首页') f.write('
\n
') f.write('') f.write('') f.write('\n
\n
\n\n') if not list: f.write('空目录\n') else: for name in list: fullname = os.path.join(path, name) colorName = displayname = linkname = name # Append / for directories or @ for symbolic links if os.path.isdir(fullname): #colorName = '' + name + '/' colorName = name + '/' displayname = name linkname = name + "/" if os.path.isfile(fullname): colorName = '' + name + '' displayname = name if os.path.islink(fullname): colorName = '' + name + '@' displayname = name # Note: a link to a directory displays with @ and links with / filename = os.getcwd() + '/' + displaypath + displayname f.write( '\n' % (requests.utils.quote(linkname), colorName, sizeof_fmt(os.path.getsize(filename)), modification_date(filename))) f.write('
%s%s%s
') self.send_footer(f) length = f.tell() f.seek(0) self.send_response(200) self.send_header("Content-type", "text/html") self.send_header("Content-Length", str(length)) self.end_headers() return f# >>FOLD>> def send_footer(self, f):# <同步状态:') for sync_result in THREAD_RESULT.values(): f.write(sync_result) f.write('\n
\n注意事项:\n
    \n') f.write('
  • 上传同名文件时,会覆盖已存在的旧文件
  • \n') f.write('
') f.write('\n
\n站外链接:\n
    \n') f.write('
  • 百度
  • \n') f.write('

\n\n\n')# >>FOLD>> def translate_path(self, path):# <>FOLD>> def copyfile(self, source, outputfile): shutil.copyfileobj(source, outputfile) def guess_type(self, path):# <>FOLD>> if not mimetypes.inited: mimetypes.init() # try to read system mime.types extensions_map = mimetypes.types_map.copy() extensions_map.update({ '': 'application/octet-stream', # Default '.py': 'text/plain', '.c': 'text/plain', '.h': 'text/plain', })# >>FOLD>> class ThreadingServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): pass if __name__ == '__main__': # test() # 单线程 # srvr = BaseHTTPServer.HTTPServer(('', 12306), SimpleHTTPRequestHandler) # 多线程 srvr = ThreadingServer(('', 12306), SimpleHTTPRequestHandler) print 'Listening ', srvr.server_address ,'...' srvr.serve_forever()