- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我调用路由 https://api.linkedin.com/v2/assets?action=registerUpload 时使用 axios
我有这样的回复
{
"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)"
}
}
我想使用上传链接从我的服务器上传一张图片
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);
但是我从服务器得到了这个响应
"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)"
最佳答案
7 个月前的问题,但今天仍然是一个问题,试图花几个小时来解决这个问题。
如果只有 Linkedin 会添加(如普通 API)他们期望获得的信息,如 Content-Type header 或什么编码,可能会容易得多。
我有一个 URL 需要作为图像上传,所以我做了一些额外的步骤,但一般的想法是你需要包含图像的内容类型,使用他们给你的 URL 来发送文件, 并将文件作为 ArrayBuffer 获取,同时不要忘记使用 PUT 方法。
获取ArrayBuffer,并获取文件的内容类型:
axios.get(imageUrl, {responseType: 'arraybuffer'}).then((imageData) => {
const contentType = imageData.headers['content-type'];
//The ArrayBuffer is at imageData.data
})
NOTE- 不要忘记包含 supportedUploadMechanism: ['SYNCHRONOUS_UPLOAD'],
所以它会同步上传,你赢了' 必须发送另一个请求以确保上传成功。
const registerUploadRequest = {
owner: this.owner,
recipes: ['urn:li:digitalmediaRecipe:feedshare-image'],
serviceRelationships: [
{
identifier: 'urn:li:userGeneratedContent',
relationshipType: 'OWNER',
},
],
supportedUploadMechanism: ['SYNCHRONOUS_UPLOAD'],
};
在我得到我需要的图像数据后,我向 /assets?action=registerUpload
发送请求,这样我就可以获得 Assets 的 id,以及我需要将其上传到的 URL :
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 才能在上传后使用 Assets 。
在我最终获得我需要的所有数据后,我只需将 ArrayBuffer 放入给定的 url,并使用正确的内容类型。
return axios.put(url, imageData.data, {
headers: {
'Authorization': `Bearer ${this.accessToken}`,
'Content-Type': contentType,
},
})
大功告成。
重要 - 他们不会在数据对象中发送任何响应,如果请求成功则图像上传,如果失败则没有。
关于node.js - 如何将媒体放在 https ://api. linkedin.com/mediaUpload/with NodeJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62731334/
我正在开发一个网络应用程序,试图在 Youtube 上共享视频,本质上是添加一个“上传到 youtube”按钮。我正在尝试使用适用于 JavaScript 的 Youtube 数据 API,遵循此示例
当我调用路由 https://api.linkedin.com/v2/assets?action=registerUpload 时使用 axios 我有这样的回复 { "value": {
我是一名优秀的程序员,十分优秀!