90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
直接测试文件写入,绕过所有业务逻辑
|
|
"""
|
|
|
|
import os
|
|
|
|
def test_direct_write():
|
|
"""直接测试文件写入"""
|
|
|
|
print("=== 直接文件写入测试 ===")
|
|
|
|
# 测试内容
|
|
test_content = b"Direct write test content - bypassing all logic"
|
|
|
|
# 文件路径
|
|
file_path = "uploads/direct_test_write.txt"
|
|
|
|
print(f"测试内容大小: {len(test_content)} bytes")
|
|
print(f"目标路径: {os.path.abspath(file_path)}")
|
|
|
|
# 确保目录存在
|
|
os.makedirs("uploads", exist_ok=True)
|
|
|
|
# 方法1: 使用 open 直接写入
|
|
print("\n--- 方法1: 直接 open 写入 ---")
|
|
try:
|
|
with open(file_path, "wb") as f:
|
|
written = f.write(test_content)
|
|
f.flush()
|
|
os.fsync(f.fileno())
|
|
print(f"写入字节数: {written}")
|
|
|
|
if os.path.exists(file_path):
|
|
size = os.path.getsize(file_path)
|
|
print(f"文件大小: {size} bytes")
|
|
|
|
if size == len(test_content):
|
|
print("✅ 方法1成功!")
|
|
else:
|
|
print(f"❌ 方法1失败: 大小不匹配 {size} != {len(test_content)}")
|
|
else:
|
|
print("❌ 方法1失败: 文件不存在")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 方法1异常: {e}")
|
|
|
|
# 方法2: 使用 Path 写入
|
|
print("\n--- 方法2: 使用 pathlib.Path 写入 ---")
|
|
from pathlib import Path
|
|
file_path2 = "uploads/path_test_write.txt"
|
|
|
|
try:
|
|
Path(file_path2).write_bytes(test_content)
|
|
|
|
if os.path.exists(file_path2):
|
|
size = os.path.getsize(file_path2)
|
|
print(f"文件大小: {size} bytes")
|
|
|
|
if size == len(test_content):
|
|
print("✅ 方法2成功!")
|
|
else:
|
|
print(f"❌ 方法2失败: 大小不匹配 {size} != {len(test_content)}")
|
|
else:
|
|
print("❌ 方法2失败: 文件不存在")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 方法2异常: {e}")
|
|
|
|
# 方法3: 检查现有文件
|
|
print("\n--- 方法3: 检查现有损坏的文件 ---")
|
|
existing_files = [f for f in os.listdir("uploads") if f.endswith('.txt')]
|
|
print(f"现有文本文件: {existing_files}")
|
|
|
|
for filename in existing_files[:3]: # 只检查前3个
|
|
file_path = os.path.join("uploads", filename)
|
|
try:
|
|
size = os.path.getsize(file_path)
|
|
print(f"{filename}: {size} bytes")
|
|
|
|
if size > 0:
|
|
with open(file_path, 'rb') as f:
|
|
content = f.read(min(100, size))
|
|
print(f" 内容预览: {content}")
|
|
|
|
except Exception as e:
|
|
print(f" 读取错误: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
test_direct_write() |