美文网首页
使用tomcat分享文件(使用python CGI)

使用tomcat分享文件(使用python CGI)

作者: YocnZhao | 来源:发表于2019-05-17 21:12 被阅读0次

前段时间重新搞了Android打包机器,然后用Tomcat 把打好的包分享出来供QA下载测试。
Mac下的Jenkins安装及配置
一开始是用的是Tomcat的listings改为true来做文件目录,后来发现tomcat的文件目录即没有按照名字字典序来排列,也没有按照文件创建时间排序(到现在我也不知道是按照个什么顺序),试图Google之,未果,后来想了一招,就是用python来简简单的搞一搞(应该也可以用js或者shell来搞),正好这段时间在看python,看到了CGI觉着很有意思,就边学边写了。
关于什么是CGI,盗了幅图

CGI架构图

CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP 服务器,提供同客户端 HTML 页面的接口。
为了更好的了解 CGI 是如何工作的,我们可以从在网页上点击一个链接或 URL 的流程:
1、使用你的浏览器访问 URL 并连接到 HTTP web 服务器。
2、Web 服务器接收到请求信息后会解析 URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。
3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。
CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。

简单理解就是用python做server了。怎么在机器上配置CGI可以参考我之前写的。
mac上使用tomcat配置CGI
Python CGI 在mac上的配置
可以用tomcat也可以用mac自带的apache,我现在用的是apache。不熟悉的可以参照我之前的文章来配置。
这里我就分享下我写的python脚本,因为主业不是python,也是初学者,就简单写了,写的不好也请大家赐教了。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, time
from operator import attrgetter

#这里定义了一个class来存储文件的 创建时间|格式化之后的时间|文件路径|文件名
class File:
    def __init__(self, timeStamp, timeString, path, name):
        self.timeStamp = timeStamp
        self.timeString = timeString
        self.path = path
        self.name = name

    def __str__(self):
        return "File(" + self.timeString + " " + self.name + " " + str(self.timeStamp) + ")\n"

    def __repr__(self):
        return "File(" + self.timeString + " " + self.name + " " + str(self.timeStamp) + ")\n"


def get_files(ppath):
    file_names = os.listdir(ppath) #获取ppath下的文件列表
    files = [] #用来存储File类
    for name in file_names: 
        if not name.startswith("."): #遍历文件 只要不是.开头的文件,刨除掉隐藏文件之类的,不要这句也可以
            file_path = unicode(name, 'utf8') 
            #获取绝对路径(这里踩坑了,本来是想下载的时候用本机绝对路径来着,后来发下写到<a>标签里后找不到,后来还是用的相对路径)
            read_path = ppath + "/" + file_path
            time_stamp = os.path.getctime(read_path) #获取创建时间
            show_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_stamp)) #格式化成易阅读的时间格式
            #构造File类并put到list里面
            m_file = File(time_stamp, show_time, read_path, file_path)
            files.append(m_file)
    #这才是最终目的,排序!!!!!!
    files.sort(key=attrgetter('timeStamp'))
    return files

#获取到传入路径下的list并存储起来供下面的html使用
pwd = os.getcwd()
cgi_path = os.path.abspath(os.path.dirname(pwd) + os.path.sep + "./MPythonPro/")
current_files = get_files(cgi_path)

print "Content-type:text/html"
print  # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello World - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>下载列表</h2>'
for simple_file in current_files:
    print '<a href="%s" download="%s">%s %s</a><br>' % (
        simple_file.path, simple_file.name, simple_file.timeString, simple_file.name)
print '</body>'
print '</html>'

很简单,上面代码都写注释了,思路就是获取到给定的路径下的所有文件,用一个类File(self, timeStamp, timeString, path, name)存储起来,然后包到<a>标签里面,使用的时候就可以直接
下载了。
如果对格式什么的有什么要求就改返回回去的html就好了。
后来又修改了下,改的更美观了些,反正就是html的东西,我尽力了~~~

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, time
from operator import attrgetter


class File:
    def __init__(self, timeStamp, timeString, path, name):
        self.timeStamp = timeStamp
        self.timeString = timeString
        self.path = path
        self.name = name

    def __str__(self):
        return "File(" + self.timeString + " " + self.name + " " + str(self.timeStamp) + ")\n"

    def __repr__(self):
        return "File(" + self.timeString + " " + self.name + " " + str(self.timeStamp) + ")\n"


def get_files(ppath):
    file_names = os.listdir(ppath)
    files = []
    for name in file_names:
        if not name.startswith("."):
            file_path = unicode(name, 'utf8')
            read_path = ppath + "/" + file_path
            time_stamp = os.path.getctime(read_path)
            show_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_stamp))

            m_file = File(time_stamp, show_time, read_path, file_path)
            files.append(m_file)
    files.sort(key=attrgetter('timeStamp'))
    return files

pwd = os.getcwd()
debug_path = os.path.abspath(os.path.dirname(pwd) + os.path.sep + "../debug/")
release_path = os.path.abspath(os.path.dirname(pwd) + os.path.sep + "../release/")
debug_files = get_files(debug_path)
release_files = get_files(release_path)
max = 0
if len(debug_files) > len(release_files):
    max = len(debug_files)
else:
    max = len(release_files)
max = 100 + max * 20
print "Content-type:text/html"
print  # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Android Apks</title>' 
print '</head>'
print '<body>'
print '<h4>当前访问时间:%s</h4>' % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print '<div id="container" style="width:1010px">'
print '<div id="content" style="background-color:#EEEEEE;height:%dpx;width:500px;float:left;">'  % max
print '<h2>&nbsp;下载Debug列表</h2>'
for simple_file in debug_files:
    print '&nbsp;%s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/debug/%s" download="%s">%s</a><br>' % (
        simple_file.timeString, simple_file.name, simple_file.name, simple_file.name)
print '</div>'
print '<div id="content" style="background-color:#FFFFFF;height:400px;width:10px;float:left;">'
print '</div>'
print '<div id="content" style="background-color:#EEEEEE;height:%dpx;width:500px;float:left;">' % max
print '<h2>&nbsp;下载Release列表</h2>'
for simple_file in release_files:
    print '&nbsp;%s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/debug/%s" download="%s">%s</a><br>' % (
        simple_file.timeString, simple_file.name, simple_file.name, simple_file.name)
print '</div>'
print '</div>'
print '</body>'
print '</html>'

相关文章

网友评论

      本文标题:使用tomcat分享文件(使用python CGI)

      本文链接:https://www.haomeiwen.com/subject/xldaaqtx.html