You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:45:08