nodejs把文件按字节分割

function fileSplit(inputFile, splitSize, outPath, ext) {
    let i = 0
    function copy(start, end, size) {
        return new Promise((resolve, reject) => {
            if (start >= size) {
                resolve()
            } else {
                if (end > size - 1) { end = size - 1 }
                const readStream = fs.createReadStream(inputFile, { start, end })
                let data = Buffer.from([])
                readStream.on('data', chunk => {
                    data = Buffer.concat([data, chunk])
                })
                readStream.on('end', async () => {
                    fs.writeFile(path.join(outPath, `split${i + 1}${ext}`), data, async err => {
                        if (err) { reject(err) }
                        i++
                        start = end + 1
                        end = end + splitSize
                        await copy(start, end, size)
                        resolve()
                    })
                })
                readStream.on('err', err => {
                    reject(err)
                })
            }
        })
    }
    return new Promise((resolve, reject) => {
        return fs.stat(inputFile, async (err, stat) => {
            if (err) { return reject(err) }

            const size = stat.size
            await copy(0, splitSize - 1, size)
            resolve(i)
        })
    })
}

fileSplit(path.join(__dirname, './test.mp4'), 1024 * 1024, __dirname, '.mp4').then(i => {
    console.log(i)
}).catch(err => {
    console.log(err)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值