【发布时间】: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