blobを規定サイズで分割する
行列が苦手なので(?)sliceのendをかち合わせさせるのか-1するのかわからなかった、実装の結果-1にすると情報損失が発生することがわかった
5MBごとに分割するサンプルコード
code:ts
import fs from "fs"
const main = async () => {
const bin = await fs.promises.readFile(
"./mac-build-image.zip"
)
const size = f.size
const _5MB = 10_485_760
const chunkSize = Math.ceil(size / _5MB)
const files = []
const end = (chunkKey + 1) * _5MB
const chunk = f.slice(chunkKey * _5MB, end < size ? end : undefined)
const path = ./mac-build-image.zip.${chunkKey}.part
await fs.promises.writeFile(path, Buffer.from(await chunk.arrayBuffer()))
files.push(path)
}
console.log(files)
}
main()
code:ts
import fs from "fs"
const main = async () => {
const buffs: Buffer[] = []
for (let fileName of [
"./mac-build-image.zip.0.part",
"./mac-build-image.zip.1.part",
"./mac-build-image.zip.2.part",
"./mac-build-image.zip.3.part",
"./mac-build-image.zip.4.part",
]) {
const part = await fs.promises.readFile(fileName)
buffs.push(part)
}
await fs.promises.writeFile(
"./mac-build-image.merged.zip",
Buffer.concat(buffs)
)
}
main()
code:log
5c542f579bdf7f237a98b96eb9495de71e57bfa1226d444793ac716f56f6062b ./mac-build-image.merged.zip
5c542f579bdf7f237a98b96eb9495de71e57bfa1226d444793ac716f56f6062b ./mac-build-image.zip
518ebe1bbe9313a5d127328bca1b6dd97fef9dab56e5873add3eec8a61341b6c ./mac-build-image.zip.0.part
e7fc6e6ad52ac5ba302249b5d4c2870aefec5333425e8b26e402539d087bd023 ./mac-build-image.zip.1.part
49cc701da700c3ab73ca741d8d60c6f3da0eaa4ebaa254957602d804220e0e36 ./mac-build-image.zip.2.part
fbff0caeeee81f477ebec52dee0b0f2063d5a0ec2c07517c85d44d7f96d9e82b ./mac-build-image.zip.3.part
a7975af8b22b54b51f2de223994a5baea32333a78f76f7c97ab3462a949bffb5 ./mac-build-image.zip.4.part