Nodejs 如何模拟浏览器文件上传?

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs 如何模拟浏览器文件上传?

由于浏览器安全策略,不能直接 js 写入要上传文件,需要模拟选择 /拖拽文件到上传控件 input 上。

希望自动化掉工作流中的一种场景,难题是模拟浏览器文件上传,puppeteer 貌似也没这种 API。

6 回复

模拟?写个简单的上传实例不好吗?写个简单的 from,把上传文件提前写好,点一下就上传?

如果你是要后续处理文件的话,直接在代码里用路径指定文件去写好了


> 把上传文件提前写好
浏览器支持这么做?上传文件读取时是个文件对象,如何写提前写好

在Node.js中模拟浏览器文件上传通常涉及使用HTTP请求库(如axiosform-data)来构建并发送包含文件数据的multipart/form-data请求。以下是一个使用axiosform-data库的示例代码,展示如何模拟浏览器文件上传:

首先,确保你已经安装了必要的库:

npm install axios form-data

然后,你可以使用以下代码来模拟文件上传:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');

// 创建一个FormData实例
const form = new FormData();

// 读取文件并添加到表单数据中
const filePath = path.join(__dirname, 'example.txt'); // 替换为你的文件路径
form.append('file', fs.createReadStream(filePath));

// 发送POST请求到文件上传的服务器端点
axios.post('http://example.com/upload', form, {
  headers: {
    ...form.getHeaders() // 获取必要的Content-Type等头部信息
  }
})
.then(response => {
  console.log('File uploaded successfully:', response.data);
})
.catch(error => {
  console.error('Error uploading file:', error);
});

在这个示例中,example.txt是你要上传的文件,http://example.com/upload是文件上传的服务器端点(请替换为你的实际URL)。form-data库负责构建multipart/form-data格式的请求体,而axios则负责发送HTTP请求。

这种方法可以模拟浏览器中的文件上传行为,适用于需要测试文件上传功能的场景。

回到顶部