python 通过http实现批量上传下载

使用Python内置的SimpleHTTPServer模块,可以轻松创建一个服务器,实现局域网内设备间的文件传输。通过扩展该模块,不仅可以单个文件上传,还能支持批量文件上传,并兼容中文文件名。此功能在Windows环境下已验证,但在Linux环境中未经测试。
摘要由CSDN通过智能技术生成

python 通过http实现批量上传下载

        python 通过http实现批量上传下载:https://blog.csdn.net/SHSQLDLL/article/details/86712209

        很多时候会需要用到同个局域网中手机/mac/windows电脑等之间文件的传输, python中自带的SimpleHTTPServer很容易就实现了电脑做服务器,客户端(浏览器)就可访问且下载服务器文件的功能.这是只要按照了python的电脑就可以作为服务器, 无需另外使用代码,使用方法不再赘述,可参考:python搭建简易HTTPServer服务

        如果需要电脑作为服务器,浏览器就可以上传和下载文件, 则可针对python自带的代码SimpleHTTPServer.py基础上增加:

        1.可单个上传文件,可参考:SimpleHTTPServerWithUpload

        如果想再加上批量上传的文件的功能, 我自己做了下文件处理和前端控件的修改, 功能如下:

        1.可批量上传的文件;

        2.中文文件名可兼容;

        3.linux中未测试.

        代码如下:

# !/usr/bin/env python
# coding=utf-8
# http://my.oschina.net/leejun2005/blog/71444
 
"""
    简介:这是一个 python 写的轻量级的文件共享服务器(基于内置的SimpleHTTPServer模块),
    支持文件上传下载,只要你安装了python(建议版本2.6~2.7,不支持3.x),
    然后去到想要共享的目录下,执行:
        python SimpleHTTPServerWithUpload.py
    或者 python SimpleHTTPServerWithUpload.py filename
"""
 
"""Simple HTTP Server With Upload.
This module builds on BaseHTTPServer by implementing the standard GET
and HEAD requests in a fairly straightforward manner.
"""
 
__version__ = "0.2"
__all__ = ["SimpleHTTPRequestHandler"]
__home_page__ = ""
 
import os, sys, platform, socket, struct, json
import posixpath
import BaseHTTPServer
from SocketServer import ThreadingMixIn
import threading
import urllib, urllib2
import cgi
import shutil
import mimetypes
import re
import time
import chardet
 
reload(sys)
sys.setdefaultencoding("utf-8")

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO
 
def echoRed(s):
    return "%s[31;1m%s%s[0m" % (chr(27), s, chr(27))
 
def get_ip_address(ifname=None):
    if sys.platform == 'win32':
        return socket.getaddrinfo(socket.gethostname(), None, socket.AF_INET, socket.SOCK_DGRAM)[-1][4][0]
    else:
        import fcntl
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(
            s.fileno(),
            0x8915,  # SIOCGIFADDR
            struct.pack('256s', ifname[:15])
        )[20:24])
 
class GetWanIp:
    def getip(self):
        try:
            myip = get_ip_address(ifname="eth0")
            # myip = self.visit("http://ipinfo.io")
        except Exception, e:
            print str(e)
            myip = "127.0.0.1"
        return myip
    def visit(self ,url):
        # req = urllib2.Request(url)
        # values = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537',
        #            'Referer': 'http://ip.taobao.com/ipSearch.php',
        #            'ip': 'myip'
        #         }
        # data = urllib.urlencode(values)
        import requests
        content = requests.get('http://ipinfo.io').content
        print content
        json_content = json.loads(content)
        return json_content["ip"]
 
def showTips():
    print ""
    print '----------------------------------------------------------------------->> '
    try:
        port = 12345
        file_name = sys.argv[1]
        print '-------->> Please visit files or dirs use Chrome Browser:     http://' + GetWanIp().getip(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值