首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NodeJs将媒体放到https://api.linkedin.com/mediaUpload/上

如何使用NodeJs将媒体放到https://api.linkedin.com/mediaUpload/上
EN

Stack Overflow用户
提问于 2020-07-05 00:02:45
回答 1查看 258关注 0票数 1

当我使用axios调用路由https://api.linkedin.com/v2/assets?action=registerUpload

我的回复是这样的

代码语言:javascript
复制
{
    "value": {
        "uploadMechanism": {
            "com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest": {
                "uploadUrl": "https://api.linkedin.com/mediaUpload/C4E22AQGSNx_ko_tzLw/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQK-VkaHKm7-NQAAAXMad6RKlbsQGW9Vi3JI0iFnlEKhTdhVcSZxyxUJ5g&app=17412253&sync=1&v=beta&ut=0MQzOzxqQ7m9k1",
                "headers": {
                    "media-type-family": "STILLIMAGE"
                }
            }
        },
        "asset": "urn:li:digitalmediaAsset:C4E22QSGSNx_ko_tzLw",
        "mediaArtifact": "urn:li:digitalmediaMediaArtifact:(urn:li:digitalmediaAsset:C4E22AQGSNx_ko_tzLw,urn:li:digitalmediaMediaArtifactClass:feedshare-uploadedImage)"
    }
}

我想用上传链接从我的服务器上传一张图片

代码语言:javascript
复制
 var newFile = fs.createReadStream(__dirname+"/temp/lion.png");

 const form_data = new FormData();
 form_data.append('file', newFile);
 const request_config = {
      headers: {
        'Authorization': `Bearer ${access_token}`,
        "Content-Type": "multipart/form-data"
      },
      data: {content : form_data['_streams']['1']}
    };

    const res = await  axios.put('https://api.linkedin.com/mediaUpload/C4E2OIQNQE5ILcQCU_lLA/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQIy5jpkZ0ut2AAAAXMadpS8A97cK9wOSjzagaNHo97bRPCYVZt7f5E4yQ&app=17411153&sync=1&v=beta&ut=2JZ18aO4E6m9k1', form_data, request_config);

但是我收到了来自服务器的响应

代码语言:javascript
复制
"Error: Request failed with status code 400\n    at createError (/home/node/app/node_modules/axios/lib/core/createError.js:16:15)\n    at settle (/home/node/app/node_modules/axios/lib/core/settle.js:17:12)\n    at IncomingMessage.handleStreamEnd (/home/node/app/node_modules/axios/lib/adapters/http.js:236:11)\n    at IncomingMessage.emit (events.js:198:15)\n    at endReadableNT (_stream_readable.js:1139:12)\n    at processTicksAndRejections (internal/process/task_queues.js:81:17)"
EN

回答 1

Stack Overflow用户

发布于 2021-02-09 05:33:17

7个月前的问题,但今天仍然是一个问题,我花了几个小时试图弄清楚这件事。

如果Linkedin可以添加(像普通API一样)他们期望获得的信息,比如Content-Type头,或者是什么编码,就会容易得多。

我有一个网址,我需要上传为一个图像,所以我做了一些额外的步骤,但一般的想法是,你需要包括你的图像的内容类型,使用他们给你的网址发送文件,并获得文件作为ArrayBuffer,以及不要忘记使用PUT方法。

要获取ArrayBuffer,并获取文件的内容类型:

代码语言:javascript
复制
axios.get(imageUrl, {responseType: 'arraybuffer'}).then((imageData) => {
    const contentType = imageData.headers['content-type'];
    //The ArrayBuffer is at imageData.data
})

备注-不要忘了包含supportedUploadMechanism: ['SYNCHRONOUS_UPLOAD'],,这样它就会同步上传,你就不必发送另一个请求来确保上传成功了。

代码语言:javascript
复制
const registerUploadRequest = {
        owner:                    this.owner,
        recipes:                  ['urn:li:digitalmediaRecipe:feedshare-image'],
        serviceRelationships:     [
          {
            identifier:       'urn:li:userGeneratedContent',
            relationshipType: 'OWNER',
          },
        ],
        supportedUploadMechanism: ['SYNCHRONOUS_UPLOAD'],
      };

在获得所需的图像数据后,我向/assets?action=registerUpload发送请求,以便获得资产的id,以及需要将其上传到的网址:

代码语言:javascript
复制
return this.post('/assets?action=registerUpload', {registerUploadRequest}).then((result) => {
        const url     = result.value.uploadMechanism['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest'].uploadUrl,
              assetId = result.value.asset.replace('urn:li:digitalmediaAsset:', '');
})

注意-我们需要id才能在上传后使用资产。

在我最终获得了我需要的所有数据后,我只需将ArrayBuffer放到给定的url中,并使用正确的内容类型。

代码语言:javascript
复制
return axios.put(url, imageData.data, {
          headers: {
            'Authorization': `Bearer ${this.accessToken}`,
            'Content-Type':  contentType,
          },
        })

你就完了。

重要的-它们不会在数据对象中发送任何响应,如果请求成功,则上传图像,如果请求失败,则不会。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62731334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档