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

Node.js Express服务运行PHP上传脚本遇404及脚本直接下载问题求助

问题根本原因

  • Express 本身没有内置PHP运行环境,放在public目录下的PHP文件只会被当成普通静态资源返回,所以直接访问时浏览器会触发下载,不会执行PHP代码逻辑。
  • express.static 中间件默认仅处理GET和HEAD类型的请求,你前端发的是POST请求到/upload.php,没有配置对应的POST路由,所以直接返回404错误。
  • 你的PHP代码本身存在语法错误:$_FILES["inputImg"]["names"]的键名错误,正确为单数name。

推荐解决方案:直接用Express实现上传逻辑(无需PHP)

不需要额外安装PHP环境,改起来最简单:

  1. 先安装文件上传依赖
npm install multer
  1. 修改server.js代码,修正原有错误,添加上传逻辑:
const express = require("express");
const https = require("https");
const path = require("path");
const fs = require("fs");
const ip = require("ip");
const multer = require("multer"); // 引入上传中间件

var app = express();
const CWD = __dirname;
var clientIp;
var port = 443;

// 配置文件上传规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 自动创建uploads目录
    const uploadDir = path.join(CWD, "uploads");
    if (!fs.existsSync(uploadDir)) {
      fs.mkdirSync(uploadDir, { recursive: true });
    }
    cb(null, uploadDir);
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname); // 保留原始文件名
  }
});
const upload = multer({ storage: storage });

function getIp(req, res, next) {
  clientIp = req.ip;
  console.log("ip:" + clientIp);
  next();
}

app.use(getIp);
app.use(express.static(path.join(CWD, "public"))); // 修正静态资源路径写法

// 处理上传请求,替代原upload.php功能
app.post("/upload.php", upload.single("inputImg"), function (req, res) {
  res.sendStatus(200);
});

// https配置保留不变
var sslServer = https.createServer(
  {
    key: fs.readFileSync(path.join(CWD, "certificate", "key.pem")),
    cert: fs.readFileSync(path.join(CWD, "certificate", "certificate.pem")),
  },
  app
);

sslServer.listen(port, function () {
  console.log("listening on " + port);
  console.log("CTRL + C to exit server");
});
  1. 可以直接删除upload.php文件,不需要了,前端代码不用做任何修改即可正常运行。

如果你一定要保留PHP实现

需要做以下修改:

  1. 安装本地PHP运行环境
  2. 给Express安装php-express中间件,配置PHP解析规则
  3. 新增POST /upload.php路由,将请求交给PHP中间件处理
  4. 修正PHP代码里的$_FILES["inputImg"]["names"]为$_FILES["inputImg"]["name"]
  5. 给uploads目录配置PHP写入权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:51:02