实现http文件服务器
时间: 2023-09-29 14:11:18 浏览: 49
好,实现一个简单的http文件服务器可以按照以下步骤进行:
1. 创建一个HTTP服务器并监听指定端口(比如8080)。
```python
import http.server
import socketserver
PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
```
2. 启动HTTP服务器后,可以在浏览器中访问localhost:8080,可以看到服务器返回了默认的文件列表。
3. 将要共享的文件放在服务器指定的目录下,比如在当前目录下创建一个名为“files”的子目录,并将要共享的文件放在其中。
4. 使用自定义处理程序(继承SimpleHTTPRequestHandler)来启用文件上传和下载功能。例如,以下代码会在浏览器中提供一个上传表单,允许用户选择并上传文件:
```python
class FileHandler(http.server.SimpleHTTPRequestHandler):
def do_POST(self):
if self.path == '/upload':
content_length = int(self.headers['Content-Length'])
data = self.rfile.read(content_length)
with open('files/' + self.headers['filename'], 'wb') as f:
f.write(data)
self.send_response(200)
self.end_headers()
self.wfile.write(b'Upload successful')
else:
self.send_response(404)
self.end_headers()
def do_GET(self):
if self.path == '/upload':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
html = '''
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
'''
self.wfile.write(html.encode())
else:
return http.server.SimpleHTTPRequestHandler.do_GET(self)
```
5. 使用自定义处理程序启动HTTP服务器。
```python
PORT = 8080
Handler = FileHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
```
现在,您可以使用浏览器或其他HTTP客户端连接到此服务器,并上传、下载文件。