Python上传.rtx文件到PHP接口无法存入指定目录问题求助
问题排查与修复方案
核心问题汇总
- 两端上传字段名不匹配,PHP无法接收到上传的文件
- Python脚本缩进错误,上传逻辑不在文件遍历循环内,仅会尝试上传最后一个扫描到的文件甚至直接报错
- PHP侧路径转义错误、目录权限异常会导致文件移动失败
Python脚本问题修复
原代码缩进错误,上传请求逻辑没有放在.rtx文件匹配的分支内,且上传字段名和PHP不匹配,同时缺少依赖导入。修复后的代码如下:
# 先导入所需依赖 import subprocess import os import pathlib import requests url = 'http://localhost:9090/project/php/new.php' driveStr = subprocess.check_output("fsutil fsinfo drives") driveStr = driveStr.decode("utf-8") driveStr = driveStr.strip().lstrip('Drives: ') drives = driveStr.split() print(drives) for drive in drives: if os.path.isdir(drive): p = os.walk(drive) for i, dirs, files in p: for filename in files: # 补全.避免匹配到文件名中间含rtx的非目标文件 if filename.endswith('.rtx'): file_path = pathlib.PurePath(i, filename) print(f"正在上传:{file_path}") # 上传逻辑放在匹配分支内,字段名和PHP保持一致用files upload_file = [ ("files", (filename, open(file_path, 'rb'), 'text/rtx')) ] response = requests.post(url, files=upload_file) # 打印响应可快速排查上传问题 print(f"上传结果:{response.text}")
PHP脚本问题修复
原代码路径转义错误,同时建议增加目录存在性判断和错误日志输出,方便排查问题。修复后的代码如下:
<?php // 测试阶段开启错误显示方便排查,上线后可关闭 error_reporting(E_ALL); ini_set('display_errors', 1); if(isset($_FILES['files'])) { // 路径用正斜杠或者双反斜杠转义,避免Windows路径转义问题 $target_dir = "C:/wamp64/www/project/php/upload/"; // 先判断目录是否存在,不存在则自动创建 if (!file_exists($target_dir)) { mkdir($target_dir, 0777, true); } $target_path = $target_dir . basename( $_FILES['files']['name']); if(move_uploaded_file($_FILES['files']['tmp_name'], $target_path)) { echo "文件 ". basename( $_FILES['files']['name'])." 上传成功"; } else{ // 输出错误码可快速定位上传失败原因 echo "上传失败,错误码:".$_FILES['files']['error']; } } else { echo "未接收到上传文件"; } ?>
额外注意事项
- 确认PHP配置的
upload_max_filesize和post_max_size参数大于你要上传的.rtx文件大小,避免大文件上传被系统拦截 - 确认
C:/wamp64/www/project/php/upload/目录存在,且wamp运行的Apache服务用户有该目录的写入权限 - 上述磁盘扫描逻辑仅适用于Windows系统,
fsutil是Windows独有的系统命令
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

