如何在nodejs实现文件上传功能
# 是什么
文件上传: 浏览器不能直接操作文件,经过下列流程完成上传
- 需经过用户交互
- 然后通过浏览器暴露的统一接口访问文件
- 读取文件到指定内存中
- 将内存中的数据提交到服务器
- 服务器解析数据并保存
# 特性
- content-type: mutipart/form-data(混合资源)
- boundary 标识分隔符,— — —XXX开始,以— — —XXX结尾
- content-disposition,包含type,name,filename: type:form-data; name="user"; filename="test.png"
# 怎么用
<!-- 前端表单 -->
<form action="http://localhost:8080/api/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" value="" multiple="multiple" />
<input type="submit" value="提交"/>
</form>
// 写入
router.post('/uploadfile', async (ctx, next) => {
// 上传单个文件
const file = ctx.request.files.file; // 获取上传文件
// 创建可读流
const reader = fs.createReadStream(file.path);
let filePath = path.join(__dirname, 'public/upload/') + `/${file.name}`;
// 创建可写流
const upStream = fs.createWriteStream(filePath);
// 可读流通过管道写入可写流
reader.pipe(upStream);
return ctx.body = "上传成功!";
});
# 原理
# FAQ
上次更新: 2021/12/19, 18:05:42