如何通过带有节点的API将视频/图像上传到Linkedin?

时间:2019-04-23 18:16:16

标签: node.js file axios linkedin linkedin-api

我需要通过API将图像/视频上传到Linkedin。我正在使用axios,并将Content-Type设置为multipart / form-data,并且我需要上传的所有图像/视频均带有指向该文件的url。所有文件都远程存储在cloudinary中。

        // Prevent page body and google map from handling the mouse
        // Wheel events when hovering over pin group content
        google.maps.event.addDomListener(groupDiv, 'mouseover', function () {
            gMap.setOptions({
                disableDoubleClickZoom: true,
                navigationControl: false,
                scaleControl: false,
                draggable: false
            });
            $('html').css('overflow', 'hidden');
        })

        // Restore control to page body page body and google map 
        // when user is no longer hovering pin group content
        google.maps.event.addDomListener(groupDiv, 'mouseout', function () {
            gMap.setOptions({
                disableDoubleClickZoom: false,
                navigationControl: true,
                scaleControl: true,
                draggable: true
            });
            $('html').css('overflow', 'auto');
        })

我在这里关注此文档: https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/rich-media-shares#

我遇到的常见错误之一是: UnhandledPromiseRejectionWarning:TypeError:source.pause不是函数

如果我更改

let bodyFormData = new FormData();
bodyFormData.append(
  "fileupload",
  request(file.url).pipe(fs.createWriteStream("video.mp4"))
);
axios
  .post("https://api.linkedin.com/media/upload", bodyFormData, {
    headers: {
      Authorization: "Bearer " + account.accessToken,
      "Content-Type": "multipart/form-data"
    }
  })
  .then(linkedinImageResult => {

只是

request(file.url).pipe(fs.createWriteStream("video.mp4"))

我收到此错误: 'java.io.IOException:缺少初始的多部分边界'

如果我删除

file.url

我收到此错误: “无法解析表单内容”

注意: file.url是指向云文件的URL,例如file.url:“ https://res.cloudinary.com/dnc1t9z9o/video/upload/v1555527484/mn3tyjcpg1u4anlma2v7.mp4

非常感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

我找到了针对这种情况的解决方案!

这是我的示例代码。

const postRichMedia = async (mediaURL, accessToken, fileName) => {
  const formData = new FormData();

  const key = S3Service.getSocialKeyFromUrl(mediaURL);
  const file = await S3Service.downloadFileFromS3(key);

  formData.append("fileupload", file.Body, fileName);

  try {
    const {data} = await axios.post('https://api.linkedin.com/media/upload', formData, {
      headers: {
        ...formData.getHeaders(),
        Authorization: `Bearer ${accessToken}`
      },
    });

    const {location} = data;

    return location;
  } catch (err) {
    console.error(err);
  }
};

让我知道这是否对您有帮助

答案 1 :(得分:0)

请注意,使用 Rich Media this solution

<块引用>

正在使用 deprecated 上传图片 已弃用。建议合作伙伴使用返回的资产API 响应如 urn:li:digitalmediaAsset:C5522AQHn46pwH96hxQ 发布 分享。

如果您需要有关资产 API 的帮助,请参阅我的回答 https://api.linkedin.com/media/upload