import os
import http.server
import socketserver
from urllib.parse import unquote

PORT = 8080
# 根目录固定在这里，子目录根据URL自动创建
BASE_DIR = "/var/www/webdav"

class PathBasedUploadHandler(http.server.SimpleHTTPRequestHandler):
    def do_PUT(self):
        try:
            # 解码URL路径 /a/b/c.jpg -> a/b/c.jpg
            file_path = unquote(self.path).lstrip('/')
            # 拼接完整物理路径
            full_path = os.path.join(BASE_DIR, file_path)
            # 自动创建父目录
            os.makedirs(os.path.dirname(full_path), exist_ok=True)
            
            # 读取并写入文件
            length = int(self.headers.get('Content-Length', 0))
            with open(full_path, 'wb') as f:
                f.write(self.rfile.read(length))

            self.send_response(201)
            self.end_headers()
        except Exception as e:
            self.send_response(500)
            self.end_headers()

if __name__ == "__main__":
    os.makedirs(BASE_DIR, exist_ok=True)
    with socketserver.TCPServer(("", PORT), PathBasedUploadHandler) as httpd:
        httpd.serve_forever()
