【问题标题】:LinkedIn Marketing API- Invalid complete multipartUpload requestLinkedIn Marketing API - 完整的 multipartUpload 请求无效
【发布时间】:2020-10-20 19:09:00
【问题描述】:

我正在尝试按照the marketing API documentation 将视频上传到 Linkedin API。到目前为止,我已经完成了以下工作:

  • 注册了多部分资产上传并收到包含唯一多部分 URL 数组的响应,以将相应的块推送到
  • 使用 Range 标头从它们所在的 Amazon S3 存储桶中获取块
  • 已通过 PUT 成功将所有这些块上传到其相应的 URL,并存储了它们的 ETag 和 HTTP 状态代码值。
  • 根据上面的链接使用 etag 和状态代码创建了最终确定的 POST 请求正文。

很遗憾,我的请求失败了:

'com.linkedin.vector.utils.logic.LogicLayerInvalidException: Invalid complete multipartUpload request ...(stringified payload)'

我没有从给出的示例中添加的请求正文的唯一部分是“元数据”字段 - 文档中没有任何内容来解释这是什么或它是从哪里生成的。我假设这就是缺少的。谁能指出我正确的方向吗?

相关请求的代码如下:

    // Loop over chunked download URLs and upload segments of S3 file.
    for(let i = 0, l = uploadDetails.partUploadRequests.length; i < l; i++) {
        const item: PartUploadRequest = uploadDetails.partUploadRequests[i];
        const partialParams: GetObjectRequest = { Bucket: video.dynamoData.mp4Bucket, Key: video.dynamoData.mp4Outputs[0], Range: `bytes=${item.byteRange.firstByte}-${item.byteRange.lastByte}` };
        console.log(`Requesting bytes ${item.byteRange.firstByte}-${item.byteRange.lastByte}`);
        const s3PartialObject = await s3Client.getObject(partialParams).promise();
        const response = await axios.put(item.url, s3PartialObject.Body, {
            headers: {
                ...item.headers
            }
        });

        const { status, headers } = response;
        responses.push({
            headers: {
                ETag: headers.etag
            },
            httpStatusCode: status
        });
    };

    // Send all chunk responses off and confirm video upload
    const finaliseVideoPayload: LinkedinFinaliseVideoPostRequest = {
        completeMultipartUploadRequest: {
            mediaArtifact: registerVideoRequest.value.mediaArtifact,
            partUploadResponses: responses
        }
    };

    console.log(`Fetched all parts, readying finalise request with ${finaliseVideoPayload.completeMultipartUploadRequest.partUploadResponses.length} parts.`);

    const json = await axios.post('https://api.linkedin.com/v2/assets?action=completeMultiPartUpload', finaliseVideoPayload, {
        headers: {
            'X-RestLi-Protocol-Version': '2.0.0',
            'Authorization': 'Bearer ' + channel.token,
            'Host': 'api.linkedin.com'
        }
    });

谢谢

【问题讨论】:

    标签: javascript linkedin linkedin-api


    【解决方案1】:

    我想这已经解决了。以防万一。

    registerApi 中有一个“元数据”字段,用于分段上传。这是在现场。

    uploadMechanism["com.linkedin.digitalmedia.uploading.MultipartUpload"].metadata

    显然,这是 completeMultipart api必需的

    所以数据会是

    completeMultipartUploadRequest: {
                mediaArtifact: registerVideoRequest.value.mediaArtifact,
                metadata: registerVideoRequest.value.uploadMechanism["com.linkedin.digitalmedia.uploading.MultipartUpload"].metadata,
                partUploadResponses: responses
            }
    

    我花了一天的时间才弄清楚没有值(空字符串)的字段是必需的。也许是一个错误。 希望这能解决问题。

    【讨论】:

    • 其实我暂时把它停了。非常感谢,我今天会测试一下!
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2019-09-27
    • 2021-02-01
    • 2015-04-29
    • 1970-01-01
    • 2012-08-13
    • 2017-02-13
    • 2017-12-31
    相关资源
    最近更新 更多