#!/usr/bin/env python3 """ 简单的文件上传测试脚本 """ import requests import json # API基础URL BASE_URL = "http://localhost:8000/api/v1" def test_auth(): """测试认证""" # 先注册 register_data = { "username": "testuser", "email": "test@example.com", "password": "TestPass123!", "confirm_password": "TestPass123!" } try: print("尝试注册用户...") reg_response = requests.post(f"{BASE_URL}/auth/register", json=register_data) print(f"注册状态码: {reg_response.status_code}") if reg_response.status_code == 201: reg_result = reg_response.json() if reg_result.get("success"): token = reg_result["data"]["tokens"]["access_token"] print("注册成功,获得token") return token else: print(f"注册失败: {reg_result}") else: print(f"注册请求失败,状态码: {reg_response.status_code}") # 如果注册失败,尝试登录 print("尝试登录用户...") login_data = { "username": "testuser", "password": "testpass123" } response = requests.post(f"{BASE_URL}/auth/login", json=login_data) print(f"登录状态码: {response.status_code}") if response.status_code == 200: result = response.json() print(f"登录结果: {result.get('success', False)}") if result.get("success"): token = result["data"]["tokens"]["access_token"] print("登录成功,获得token") return token else: print(f"登录失败: {result}") return None except Exception as e: print(f"认证出错: {e}") return None def test_file_upload(token): """测试文件上传""" headers = { "Authorization": f"Bearer {token}" } # 创建测试文件 test_content = "Hello World! 测试文件内容" try: files = { "file": ("test.txt", test_content.encode("utf-8"), "text/plain") } data = { "description": "测试文件", "tags": "test,upload", "is_public": "false" } response = requests.post( f"{BASE_URL}/files/upload", headers=headers, files=files, data=data ) print(f"上传状态码: {response.status_code}") print(f"上传响应: {response.text}") if response.status_code == 201: result = response.json() if result.get("success"): file_info = result["data"]["file"] print(f"上传成功! 文件ID: {file_info['id']}") return file_info['id'] return None except Exception as e: print(f"上传出错: {e}") return None def test_file_list(token): """测试获取文件列表""" headers = { "Authorization": f"Bearer {token}" } try: response = requests.get( f"{BASE_URL}/files/list", headers=headers ) print(f"列表状态码: {response.status_code}") if response.status_code == 200: result = response.json() if result.get("success"): files = result["data"]["files"] print(f"文件数量: {len(files)}") for f in files: print(f" - {f['original_filename']} ({f['file_size']} bytes)") except Exception as e: print(f"获取列表出错: {e}") def test_storage_info(token): """测试存储信息""" headers = { "Authorization": f"Bearer {token}" } try: response = requests.get( f"{BASE_URL}/files/storage/info", headers=headers ) print(f"存储信息状态码: {response.status_code}") if response.status_code == 200: result = response.json() if result.get("success"): info = result["data"] print(f"存储配额: {info['total_quota']} bytes") print(f"已使用: {info['used_space']} bytes") print(f"文件数量: {info['file_count']}") except Exception as e: print(f"获取存储信息出错: {e}") if __name__ == "__main__": print("开始测试文件存储功能...") # 1. 认证 token = test_auth() if not token: print("认证失败,退出测试") exit(1) # 2. 上传文件 file_id = test_file_upload(token) # 3. 获取文件列表 test_file_list(token) # 4. 获取存储信息 test_storage_info(token) print("测试完成!")