成品短视频源码出售,如何实现大文件秒传?
成品短视频源码出售,如何实现大文件秒传?
大文件秒传
逻辑梗概
客户端上传文件时,先提交文件的哈希值,
服务端根据哈希值查询文件是否已经上传,如果已上传,则直接返回已上传状态
客户端收到已上传状态后,直接跳过上传过程
优势分析
提高上传效率:秒传可以提高上传效率,因为文件已经在上传过程中被上传过了,直接返回已上传状态,省要再次上传,提高效率。
代码实现
校验接口,校验是否已经存在目标文件
逻辑:根据文件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 } } }
以上就是成品短视频源码出售,如何实现大文件秒传?, 更多内容欢迎关注之后的文章