LinkedIn营销API-无效的完整多部分上传请求

LinkedIn Marketing API- Invalid complete multipartUpload request(LinkedIn营销API-无效的完整多部分上传请求)
本文介绍了LinkedIn营销API-无效的完整多部分上传请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据the marketing API documentation将视频上载到LinkedIn API。到目前为止,我已经完成了以下工作:

  • 注册了分块资产上传,并收到了包含唯一分块URL数组的响应,以将相应的块推送到
  • 使用Range Header从它们所在的Amazon S3存储桶中获取数据块
  • 已通过PUT将所有这些区块成功上载到其对应的URL,并存储了它们的ETag和HTTP状态代码值。
  • 根据上面的链接,使用eTag和状态代码创建了Finalise 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'
        }
    });

谢谢

推荐答案

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

注册器Api中有一个字段‘METADATA’,用于分块上传。这是在现场进行的。

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
        }

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

这篇关于LinkedIn营销API-无效的完整多部分上传请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

本文给大家介绍Javascript js中实现和PHP一样的时间戳格式化函数的方法,具有一定的参考借鉴价值,需要的朋友可以参考下,我们知道在php中有一个date()函数,可以方便的把时间戳格式化为时间字符串。可是在js中,我们要想实现这种效果,要写好
需求是模板字符串中不允许出现script 标签、不允许有javascript: 和 .js 文件引用,主要方法如下: clearScriptTag (str) { const reg = /script[^]*([\S\s]*?)\/script/gim; // 清除标签内 相关 xss 安全代码 const reg1 = /javascript:/gim; const reg2 = / *.js/gim; if (reg.test(str)) { str
javascript中Replace全部替换字符用法实例代码,替换1次和多次,主要是正则表达式 var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace("\n",";"));//结果:1;2\n3\n 只替换了第一个var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace(/\n/g, ";"));//结果:1;2;3; replac
js输出当前日期和时间的实例代码,具体实例代码如下,有兴趣的朋友可以尝试运行下。 !doctype htmlhtml lang="en" head meta charset="UTF-8" title获取当前时间/title /head body script type="text/javascript" /** *获取当前时间 *format=1精确到天 *format=2精确到秒 */ function
p5.js WebGL 3d graphics covered by 2d background when rotated(P5.js旋转时被2D背景覆盖的WebGL 3D图形)
Static vector field with classic arrows at every point on p5.js(P5.js上每个点都有经典箭头的静态向量场)