【问题标题】:CLIENT_ERROR when uploading Video To LinkedIn API将视频上传到 LinkedIn API 时出现 CLIENT_ERROR
【发布时间】:2022-01-09 09:56:35
【问题描述】:

我按照 LinkedIn 文档 Here 将视频上传到他们的 Vector Assets API

视频已上传,但当我检查视频的状态时,我不断在食谱下收到 CLIENT_ERROR。

这是我使用的代码:

let fileName = 'redacted.mp4'; //This sample file is about 24MB
let fileStream = fs.createReadStream(fileName);
let organisationId = 'redacted';
let isVideo = module.exports.isVideo(fileName);
let fileStats = fs.statSync(fileName);
let fileSizeBytes = fileStats.size;

let mediaUploadInitAction = `https://api.linkedin.com/v2/assets?action=registerUpload`;

let registerUploadRequest = {
    "registerUploadRequest": {
        "owner": `urn:li:organization:${organisationId}`,
        "recipes": [
            `urn:li:digitalmediaRecipe:feedshare-${isVideo ? 'video' : 'image'}`
        ],
        "serviceRelationships": [
            {
                "identifier": "urn:li:userGeneratedContent",
                "relationshipType": "OWNER"
            }
        ]
    }
};
if (!isVideo) {
    registerUploadRequest['registerUploadRequest']["supportedUploadMechanism"] = [
        "SYNCHRONOUS_UPLOAD"
    ]
} else {
    if (fileSizeBytes > 52428800) { //I was told if the file length is more than 52428800, I should use multipart upload mechanism. My current file size is less than that though.
        registerUploadRequest['registerUploadRequest']["supportedUploadMechanism"] = [
            "MULTIPART_UPLOAD"
        ];
        registerUploadRequest['registerUploadRequest']['fileSize'] = fileSizeBytes;
    }
}

let { data: mediaUploadRegisterResponse } = await axios.post(mediaUploadInitAction, registerUploadRequest, { headers: headers });
let uploadRegisterData = mediaUploadRegisterResponse.value;
let uploadMechanism = uploadRegisterData['uploadMechanism'];
let singleUploadRequest = uploadMechanism['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest'];
let uploadUrl = singleUploadRequest ? singleUploadRequest['uploadUrl'] : '';
let uploadHeaders = singleUploadRequest ? singleUploadRequest['headers'] : '';

let multipartUpload = uploadMechanism['com.linkedin.digitalmedia.uploading.MultipartUpload'];
if (singleUploadRequest) { //This always work flawlessly for image uploads but not for video uploads
    await axios.put(uploadUrl, fileStream, {
        headers: {
            'Accept': '*/*',
            ...uploadHeaders,
            ...headers,
            'Content-Type': 'application/octet-stream'
        },
        maxContentLength: Infinity,
        maxBodyLength: Infinity,
    });
    fs.unlink(fileName, () => { });
}

以上代码完美适用于图片上传。但是对于视频上传,我会不断回复CLIENT_ERROR

这是我不断收到的完整状态消息:

{
    "recipes": [
        {
            "recipe": "urn:li:digitalmediaRecipe:feedshare-video",
            "status": "CLIENT_ERROR"
        }
    ],
    "serviceRelationships": [
        {
            "relationshipType": "OWNER",
            "identifier": "urn:li:userGeneratedContent"
        }
    ],
    "mediaTypeFamily": "VIDEO",
    "created": 1641646213127,
    "id": "C4adhdhahahhdKJZw",
    "lastModified": 1641646215307,
    "status": "ALLOWED"
}

请问,我该怎么做才能解决这个问题?

谢谢

【问题讨论】:

    标签: node.js express linkedin linkedin-api linkedin-jsapi


    【解决方案1】:

    对于将来可能会遇到类似问题的任何人。在暴力破解所有可能的选项之后,这对我有用。

    如果视频文件小于 52MB,请勿使用fs.createReadStream。请改用以下代码:

     fs.readFile(fileName, async (err, data) => {
        if (err) {
            console.log(`Error Reading LinkedIn Video File ${fileName}`, err);        
            return;                   
        }
        await axios.put(uploadUrl, data, {
            headers: singleFileUploadHeaders,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
       });
    });
    

    视频终于又上传了,没有CLIENT_ERROR!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 2019-12-25
      • 2019-09-19
      • 2022-07-06
      • 2011-05-28
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多