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

Node.js本地文件上传至PHP服务器失败问题求助

Node.js 上传文件到 PHP 服务器解决方案

问题分析

  1. 直接传递文件流:请求为 raw 格式,PHP 的 $_FILES 仅解析 multipart/form-data 类型的请求,因此无法识别上传的文件,导致 $_FILES 为空。
  2. 使用 FormData 报错:Node.js 环境下,浏览器原生的 FormData 接口不支持 Node.js 的 ReadStream(仅接受 Blob/File 对象),因此会抛出参数类型错误。

解决方案

1. Node.js 端代码

首先安装依赖包:

npm install form-data node-fetch

然后编写上传代码:

const fs = require('fs');
const FormData = require('form-data');
const fetch = require('node-fetch');

// 替换为你的本地文件路径和 PHP 接口地址
const filePath = './local-file.txt';
const API_ENDPOINT = 'http://your-server.com/upload.php';

// 创建 FormData 实例,添加文件流
const formData = new FormData();
// 第三个参数为上传后的文件名,可自定义
formData.append('file', fs.createReadStream(filePath), 'uploaded-file.txt');

// 发送请求,需携带 FormData 自动生成的请求头
fetch(API_ENDPOINT, {
  method: 'POST',
  body: formData,
  headers: formData.getHeaders()
})
.then(res => {
  if (res.ok) {
    console.log('上传成功');
    return res.text();
  }
  throw new Error(`请求失败,状态码:${res.status}`);
})
.then(responseText => console.log('服务器返回:', responseText))
.catch(err => console.error('上传出错:', err));

2. PHP 端代码

替换你原有的 PHP 代码为以下内容,正确处理上传的文件:

<?php
// 检查是否有合法的文件上传
if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
    // 定义上传目录,确保目录存在
    $uploadDir = './uploads/';
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    // 获取文件名,避免路径注入
    $safeFileName = basename($_FILES['file']['name']);
    $targetPath = $uploadDir . $safeFileName;

    // 移动临时文件到目标目录
    if (move_uploaded_file($_FILES['file']['tmp_name'], $targetPath)) {
        echo "文件上传成功,存储路径:{$targetPath}";
    } else {
        echo "文件移动失败,请检查目录权限";
    }
} else {
    echo "未检测到有效文件上传";
    // 调试用:打印上传错误信息
    // print_r($_FILES);
}
?>

关键说明

  • 使用 form-data 包而非浏览器原生 FormData:该包专门为 Node.js 环境设计,支持文件流上传,且能自动生成包含 boundary 的 Content-Type 请求头,符合 PHP 解析文件上传的要求。
  • PHP 端必须使用 move_uploaded_file:上传的文件会先存在服务器临时目录,需手动移动到指定位置,直接读取临时文件或操作 $_FILES 无法获取完整文件内容。

内容的提问来源于stack exchange,提问作者FabricioG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:24:15