Nodejs 如何模拟浏览器文件上传?
Nodejs 如何模拟浏览器文件上传?
由于浏览器安全策略,不能直接 js 写入要上传文件,需要模拟选择 /拖拽文件到上传控件 input 上。
希望自动化掉工作流中的一种场景,难题是模拟浏览器文件上传,puppeteer 貌似也没这种 API。
https://github.com/GoogleChrome/puppeteer/blob/v1.5.0/docs/api.md#elementhandleuploadfilefilepaths
这个也许可以
模拟?写个简单的上传实例不好吗?写个简单的 from,把上传文件提前写好,点一下就上传?
如果你是要后续处理文件的话,直接在代码里用路径指定文件去写好了
> 把上传文件提前写好
浏览器支持这么做?上传文件读取时是个文件对象,如何写提前写好
flash /滑稽
在Node.js中模拟浏览器文件上传通常涉及使用HTTP请求库(如axios
或form-data
)来构建并发送包含文件数据的multipart/form-data请求。以下是一个使用axios
和form-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请求。
这种方法可以模拟浏览器中的文件上传行为,适用于需要测试文件上传功能的场景。