node读取前端传来的文件流,并以utf8格式输出文件内容
时间: 2024-01-22 15:03:27 浏览: 116
nodejs读取文件
可以使用Node.js自带的fs模块来实现。具体实现步骤如下:
1. 在前端使用FormData创建一个表单对象,将文件流append到表单中。
2. 在后端使用Express框架,使用body-parser中间件来解析表单数据。
3. 在后端使用fs模块的createReadStream()方法读取文件流,使用pipe()方法将文件流传输到一个可写流中。
4. 使用可写流的on('data', callback)方法来获取文件内容,将获取到的Buffer对象转换成utf8格式的字符串。
以下是代码示例:
前端代码:
```html
<form id="fileForm">
<input type="file" id="fileInput">
<button type="submit">上传文件</button>
</form>
<script>
const fileForm = document.querySelector('#fileForm');
fileForm.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData();
const fileInput = document.querySelector('#fileInput');
formData.append('file', fileInput.files[0]);
const res = await fetch('/readFile', {
method: 'POST',
body: formData
});
const data = await res.text();
console.log(data);
});
</script>
```
后端代码:
```javascript
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/readFile', (req, res) => {
const fileStream = req.files.file.data;
const writeStream = fs.createWriteStream('./temp.txt');
fileStream.pipe(writeStream);
writeStream.on('finish', () => {
const readStream = fs.createReadStream('./temp.txt', 'utf8');
let data = '';
readStream.on('data', (chunk) => {
data += chunk.toString();
});
readStream.on('end', () => {
fs.unlinkSync('./temp.txt');
res.send(data);
});
});
});
app.listen(3000, () => {
console.log('Server started at http://localhost:3000');
});
```
在这个示例中,我们首先将文件流写入到本地的一个临时文件temp.txt中,然后使用fs模块的createReadStream()方法从临时文件中读取文件内容,最后将读取到的内容发送给前端。注意,在读取完文件内容后,需要使用fs模块的unlinkSync()方法删除临时文件。
阅读全文