安全处理文件名: 1. 剥离路径只保留文件名 2. 替换非法字符 3. 处理空文件名情况
(filename: str)
| 138 | |
| 139 | |
| 140 | async def sanitize_filename(filename: str) -> str: |
| 141 | """ |
| 142 | 安全处理文件名: |
| 143 | 1. 剥离路径只保留文件名 |
| 144 | 2. 替换非法字符 |
| 145 | 3. 处理空文件名情况 |
| 146 | """ |
| 147 | filename = os.path.basename(filename) |
| 148 | illegal_chars = r'[\\/*?:"<>|\x00-\x1F]' # 包含控制字符 |
| 149 | # 替换非法字符为下划线 |
| 150 | cleaned = re.sub(illegal_chars, "_", filename) |
| 151 | # 处理空格(可选替换为_) |
| 152 | cleaned = cleaned.replace(" ", "_") |
| 153 | # 处理连续下划线 |
| 154 | cleaned = re.sub(r"_+", "_", cleaned) |
| 155 | # 处理首尾特殊字符 |
| 156 | cleaned = cleaned.strip("._") |
| 157 | # 处理空文件名情况 |
| 158 | if not cleaned: |
| 159 | cleaned = "unnamed_file" |
| 160 | # 长度限制(按需调整) |
| 161 | return cleaned[:255] |
no outgoing calls
no test coverage detected