欢迎访问宙启技术站
智能推送

Python中利用SimpleHTTPServer模块实现文件下载功能的简单例子

发布时间:2023-12-25 22:07:20

在Python中,我们可以使用SimpleHTTPServer模块来实现一个简单的文件下载功能。SimpleHTTPServer模块是Python标准库中的一个模块,它提供了一个简单的Web服务器,可以用来在本地主机上提供静态文件的访问。下面是一个使用SimpleHTTPServer模块实现文件下载功能的例子:

import SimpleHTTPServer
import SocketServer

class DownloadHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    # 重写do_GET方法,处理GET请求
    def do_GET(self):
        # 获取请求的文件路径
        file_path = self.path[1:]
        
        try:
            # 以二进制方式打开文件
            f = open(file_path, 'rb')
            # 获取文件的内容
            content = f.read()
            f.close()
            
            # 设置响应头,告诉浏览器这是一个可以下载的文件
            self.send_response(200)
            self.send_header('Content-type', 'application/octet-stream')
            self.send_header('Content-Disposition', 'attachment; filename=%s' % file_path)
            self.send_header('Content-Length', len(content))
            self.end_headers()
            
            # 发送文件内容
            self.wfile.write(content)
        except IOError:
            # 如果文件不存在,返回404错误
            self.send_error(404, 'File Not Found: %s' % file_path)


if __name__ == '__main__':
    # 指定服务器地址和端口
    host = '127.0.0.1'
    port = 8000
    
    # 创建HTTP服务器
    httpd = SocketServer.TCPServer((host, port), DownloadHandler)
    
    print 'Serving HTTP on %s:%d...' % (host, port)
    
    # 启动服务器
    httpd.serve_forever()

在上面的例子中,我们首先导入了SimpleHTTPServer和SocketServer两个模块。然后,我们定义了一个DownloadHandler类,继承自SimpleHTTPServer.SimpleHTTPRequestHandler类。在DownloadHandler类中,我们重写了do_GET方法,处理GET请求。

在do_GET方法中,我们首先获取了请求的文件路径,然后以二进制方式打开文件,并读取文件内容。接下来,我们设置了响应头,告诉浏览器这是一个可以下载的文件,并发送文件内容。

最后,在主程序中,我们创建了一个SocketServer.TCPServer对象,传入服务器的地址和端口,并指定DownloadHandler类作为处理请求的类。然后,我们启动了服务器,通过调用serve_forever方法,来等待客户端的连接和请求。

使用这个例子,在本地主机上运行起来的服务器会监听指定的地址和端口,并提供文件的下载功能。要下载文件,只需要在浏览器中输入服务器地址和端口,然后访问要下载的文件的路径即可。

例如,如果我们在本地主机的8000端口上运行该服务器,然后要下载一个名为file.txt的文件,只需要在浏览器中输入http://127.0.0.1:8000/file.txt,浏览器就会开始下载文件。

这就是利用SimpleHTTPServer模块实现文件下载功能的简单例子。简单来说,我们只需要重写do_GET方法,处理GET请求,并在其中发送文件内容和设置响应头即可实现文件下载的功能。