在分块上传内容结束以后的事件监听,我们会实现 unlinkSync 删除临时文件操作,那么试想一下,在这个事件监听中,我们是否可以通过totalChunks以及currentChunk获取当前上传的进度情况呢?
后端
upload上传接口:
app.post('/upload',upload.single('file'),(req,res) => {
const file = req.file;
const filename = req.body.filename;
const totalChunks = parseInt(req.body.totalChunks); // 获取总块数
const currentChunk = parseInt(req.body.currentChunk); // 获取当前块数
const chunkPath = path.join(
"uploads/",
`${filename}-chunk-${currentChunk}`
);
const chunkStream = fs.cr服务器托管网eateReadStream(fi服务器托管网le.path);
const writeStream = fs.createWriteStream(chunkPath);
chunkStream.pipe(writeStream);
// 对分块上传内容结束以后的事件监听
chunkStream.on("end", () => {
fs.unlinkSync(file.path); //读取文件块的流结束后,删除临时文件
// 打印 progress 我们就可以获取到文件进度情况
const progress = ((currentChunk + 1) / totalChunks) * 100; // 计算上传进度情况
res.json({ progress }); // 服务器端向客户端进行返回操作
});
});
前端
html:
//设置一个进度条
script:
async function upload() {
const fileInput = document.getElementById('fileInput'); //获取input框
const file = fileInput.files[0]; // 对input的文件进行获取
const chunkSize = 1*1024*1024; //初始化分块的尺寸 每块分块文件大小为1MB(1兆)
const totalChunks = Math.ceil(file.size / chunkSize); //通过文件尺寸计算出所有的块数
let currentChunk = 0; //设置块的初始值
// 通过while循环处理
while (currentChunk
再次发送文件,进度条已经正常显示:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 数仓的两种轻量级数据交换格式:json与jsonb
武汉源创会回归,4月20聊聊大模型” 本文分享自华为云社区《GaussDB(DWS)——探究JSON,JSONB》,作者:yd_283975606。 1. 前言 适用版本:【8.1.1(及以上)】 JSON(JavaScript Object Notation…