我正在使用 LinkedIn 的视频 API 上传视频 - 但我的文件分块方法一定有问题,因为我收到错误:
data: {
owner: 'urn:li:person:a1b2c3d4e5',
processingFailureReason: 'CORRUPTED_ENTITY',
id: 'urn:li:video:V5910dQH83nkpw91Dww',
status: 'PROCESSING_FAILED'
}
我的 MP4 视频文件大小为
20301174
,显然字节块大小为 4194303
,根据 Linkedin API 文档 - 这意味着以下代码应该有效:
const splitVideo = async (filepath) => {
var blobsArray = []
const buffer = fs.readFileSync(filepath, {encoding:'utf8', flag:'r'})
const blobParent = new Blob([buffer], {type: 'video/mp4'})
const blobChild1 = blobParent.slice(0, 4194303, 'video/mp4') // 4194303 bytes
const blobChild2 = blobParent.slice(4194304, 8388607, 'video/mp4') // 4194303 bytes
const blobChild3 = blobParent.slice(8388608, 12582911, 'video/mp4') // 4194303 bytes
const blobChild4 = blobParent.slice(12582912, 16777215, 'video/mp4') // 4194303 bytes
const blobChild5 = blobParent.slice(16777216, 20301174, 'video/mp4') // 3523957 bytes
const blobsArray = [blobChild1, blobChild2, blobChild3, blobChild4, blobChild5]
return blobsArray
}
任何提示或指导都会有帮助。
好吧,我上面的代码有太多问题,但我现在有一个工作示例在这里。
文件分块需要通过 bash
split -b 4194303
我尝试了很多 JavaScript 方法来分割文件,但没有一个被 LinkedIn 的 API 接受。
上传的文件也需要通过
readFileSync
发送,这是同步而不是异步。
您的代码的问题是您没有在每个块中包含最后一个字节。 根据linkedin文档,
firstByte
和lastByte
是包含。
这意味着您需要将文件拆分为
4194304 bytes
NOT 4194303 bytes
。
如果您想使用
uploadInstructions
,您可以使用此代码。
注意:您必须在不同位置添加
+ 1
,因为第一个和最后一个字节都包含在内。
byte = instructions.lastByte - instructions.firstByte + 1;