简单http文件服务器

小说:电脑怎么兼职赚钱作者:侯建石成更新时间:2019-02-21字数:81217

简单http文件服务器


  日常工作中,主要是通过ssh终端(putty等)远程开发,经常涉及到传输文件,因为本地系统为Win10,所以没办法利用强大的linux脚本来进行文件传输。之前用过python的SimpleHttp模块写了一个简单的文件服务器(http://www.cnblogs.com/sxhlinux/p/6694904.html),但是缺少GUI,且仍然依赖curl等相关命令。所以,就想着写一个简单的http文件服务器,满足普通的文件上传、下载文件。
        代码采用python 3.4版本,结构如下

 

代码如下

#### server.py ####

#!/usr/bin/python3
 
import sys
from http.server import BaseHTTPRequestHandler, HTTPServer, CGIHTTPRequestHandler
 
if __name__ == "__main__":
    try:
        handler = CGIHTTPRequestHandler
        handler.cgi_directories = ["/cgi-bin", "/htbin"]
        port = int(sys.argv[1])
        print("port is %d"% port)
        server = HTTPServer(("", port), handler)
        print("Welcome to my website !")
        server.serve_forever()
 
    except KeyboardInterrupt:
        print ("^C received, shutting down server")
        server.socket.close()

 

#### index.html ####

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
    <title>File Server</title>
</head>
<body>
    <form action="/cgi-bin/download.py" method="get">
        要下载的文件: <input type="text" name="filename" />
        <input type="submit" value="download">
    </form>
 
    <form enctype="multipart/form-data" action="/cgi-bin/upload.py" method="post">
        要上传的文件: <input type="file" name="filename" />
        <input type="submit" value="upload">
    </form>
</body>
</html>

 

#### download.py ####

#!/usr/bin/python3
 
import os
import sys
import cgi
 
form = cgi.FieldStorage()
 
filename = form.getvalue("filename")
 
dir_path = "/home/sxhlinux/data/"
target_path = dir_path + str(filename)
if os.path.exists(target_path) == True:
    print ("Content-Type: application/octet-stream")
    print ("Content-Disposition: attachment; filename = "%s"" % filename)
 
    sys.stdout.flush()
    fo = open(target_path, "rb")
    sys.stdout.buffer.write(fo.read())
    fo.close()
else:
    print("""
        Content-type: text/html

        <html>
        <head>
        <meta charset="utf-8">
        <title>File server</title>
        </head>
        <body>
        <h1> %s doesn"t exist in the server:
        files in the server list below: </h1>""" % filename)
 
    for line in os.popen("ls -lh ~/data/"):
        name = line.strip().split(" ", 8)
        if len(name) == 9:
            print("""<form action="/cgi-bin/download.py" method="get">
                %s <input type="submit" name="filename" value="%s">
                </form>""" % (line, name[8]))
 
    print("</body> <html>")

 

 #### upload.py ####

#!/usr/bin/python3
 
import cgi, os
 
form = cgi.FieldStorage()
 
item = form["filename"]
 
if item.filename:
    fn = os.path.basename(item.filename)
    open("/home/sxhlinux/data/" + fn, "wb").write(item.file.read())
    msg = "File " + fn + " upload successfully !"
else:
    msg = "no file is uploaded "
 
print("""
Content-type: text/html

<html>
<head>
<meta charset="utf-8">
<title>Hello world</title>
</head>
<body>
<h2>名称: %s</h2>
</body>
<html>
""" % (msg,))

 

将上述代码按照前面的目录结构放好,然后执行命令 nohup /usr/bin/python3 server.py 8001 >/dev/null &  启动文件服务端,监听8001端口,远程可以在浏览器中 输入 http://SERVER_ADDR:8001 来访问该文件服务器进行相关的文件上传下载操作。
 
注:附件中是整个demo的代码(download.py,upload.py两个文件中的目录路径 /home/sxhlinux/data 需要改成自己要存储文件的文件夹路径),有兴趣的小伙伴可以下载修改,刚学习python,欢迎大家多多提意见。
 
参考引用:
  1. http://www.runoob.com/python3/python3-cgi-programming.html

当前文章:http://www.leetaemin.cn/kan/1ttxq3x880.html

发布时间:2019-02-21 03:08:36

2018最安全的理财app 麦家琪的电影 拼多多有返利吗 小孩玩具店生意好吗 2018最新网赚项目 2018最新赚钱新手游 58同城在家客服招聘 ipad赚钱软件排行榜 tlapp推广平台是什么 保姆上下班途中受伤

65218 14158 11580 87297 25101 7045780752 50699 34212

我要说两句: (0人参与)

发布