成品短视频源码出售,如何实现大文件秒传?

成品短视频源码出售,如何实现大文件秒传?

大文件秒传

逻辑梗概

客户端上传文件时,先提交文件的哈希值,
服务端根据哈希值查询文件是否已经上传,如果已上传,则直接返回已上传状态
客户端收到已上传状态后,直接跳过上传过程

优势分析

提高上传效率:秒传可以提高上传效率,因为文件已经在上传过程中被上传过了,直接返回已上传状态,省要再次上传,提高效率。

代码实现
校验接口,校验是否已经存在目标文件

逻辑:根据文件Hash值和文件名组成 “文件Hash.文件扩展名” ,以保证文件名唯一

app.get('/verify', (req, res) => {
    const { fileHash, fileName } = req.query;
    const filePath = path.resolve('uploadFiles', fileHash + path.extname(fileName));
    const exitFile = fse.pathExistsSync(filePath);
    res.send({
        exitFile
    })
})

 

校验函数

// 校验文件、文件分片是否存在
const verify = (fileHash, fileName) => {
    return fetch(`http://localhost:3000/verify?fileHash=${fileHash}&fileName=${fileName}`, {
        method: "GET",
    }).then(res => res.json());
};

// 文件上传
const uploadFile = async (file) => {
    // 设置文件名
    fileName = file.name;
    // 获取文件hash值
    fileHash = await getHash(file);
    // 校验是否已经上传该文件
    let { exitFile } = await verify(fileHash, fileName);
    if (exitFile) {
        return {
            mag: "文件已上传",
            success: true
        }
    }
    // 获取切片
    chunks = createChunks(file);
    try {
        await uploadChunks(chunks.filter(chunk => !chunk.uploaded))
        await mergeRequest(fileHash, fileName)
    } catch (err) {
        return {
            mag: "文件上传错误",
            success: false
        }
    }
}

 

以上就是成品短视频源码出售,如何实现大文件秒传?, 更多内容欢迎关注之后的文章

 

posted @ 2024-08-31 09:45  云豹科技-苏凌霄  阅读(1)  评论(0编辑  收藏  举报