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

localhost使用http-server上传文本文件返回405 Method Not Allowed错误如何解决

问题根源

NPM 官方的http-server包是静态资源托管工具,默认仅支持 GET/HEAD 这类读取类请求,没有内置 POST 请求处理、文件接收写入本地目录的逻辑,你直接发送 POST 上传请求自然会被拦截,返回405方法不允许的报错。

解决方法

无需复杂框架,只需用极简 Node 自定义服务替代http-server,同时保留静态资源托管能力、新增文件上传支持即可:

第一步:安装依赖

只需要两个轻量包分别处理服务请求和表单上传:

npm install express multer

第二步:编写自定义服务代码

在项目根目录新建server.js文件,内容如下:

const express = require('express');
const multer = require('multer');
const app = express();
const port = 8002;

// 配置文件存储规则:自动写入对应目录、保留原文件名
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 路径和你上传时的folder_name参数对应,比如data就存入./data目录
    cb(null, './' + req.params.folder);
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname);
  }
})
const upload = multer({ storage: storage });

// 静态资源托管,和原http-server功能完全一致,可正常访问html、js等静态文件
app.use(express.static('./'));

// 处理上传的POST接口
app.post('/:folder/', upload.single('file'), function (req, res) {
  res.send('上传完成');
})

app.listen(port, () => {
  console.log(`服务已启动,地址:http://localhost:${port}`)
})
  • 注意:提前在项目根目录新建你要存储文件的文件夹,比如要上传到data目录,就先创建./data文件夹,避免路径不存在报错。

第三步:修改前端上传代码

原代码有两个小问题,手动设置multipart/form-data会丢失边界标识参数,append参数需要和后端配置对应:

function upload_file(folder_name, file_name, file_contents) {
  var req = new XMLHttpRequest();

  req.addEventListener("load", callback);
  req.open("POST", "http://localhost:8002/" + folder_name + "/");
  // 删掉手动设置Content-Type的代码,浏览器会自动生成带boundary的正确请求头

  var formData = new FormData();
  // 第一个参数和后端upload.single的参数对应,第二个传入文本Blob对象,第三个为文件名
  formData.append("file", new Blob([file_contents], { type: 'text/plain' }), file_name + ".txt");

  req.send(formData);

  function callback() {
      console.log("Success");
  }
}

upload_file("data", "data.txt", "[1, 2, 3]");

第四步:启动服务

关掉原来的http-server进程,运行自定义服务即可:

node server.js

此时再次触发上传,文本文件就会自动写入到对应目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:06:04