我想用Laravel HTTP客户端上传一个文件,但我不知道如何工作或将媒体附加到LinkedIn。而且,LinkedIn API甚至在上传后不给予任何响应,这对我来说更难找出我哪里出错了。
LinkedIn文档给出了一个使用curl命令的例子。当我使用curl命令上传一个文件时,它起作用了!。而且通过postman使用PUT方法和body作为二进制文件,它也起作用了。
下面是LinkedIn文档中的“上传图片”部分,其中给出了bash的一个示例。
https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/vector-asset-api?tabs=http#upload-the-image。
curl -i --upload-file ~/Desktop/Myimage.jpg -H 'Authorization: Bearer Redacted' "https://api.linkedin.com/mediaUpload/C5522AQHn46pwH96hxQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQLKRJOn_yNw6wAAAW2T0DWnRStny4dzsNVJjlF3aN4-H3ZR9Div77kKoQ&app=1983914&sync=0&v=beta&ut=1Dnjy796bpjEY1"
所以,我想在Laravel HTTP客户端中实现上面的curl请求。
下面是我尝试实现上传功能的一小段代码
Http::attach('file', file_get_contents($request->file('file')), 'perfidious.jpg')
->withHeaders([
'Authorization' => 'Bearer ' . $oauth2_token,
'Content-Type' => $file->getMimeType(),
])->put('https://api.linkedin.com/mediaUpload/C4E22AQFyx5-WPFqU4w/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJDUuJEebKdjgAAAYAIF2PvtGz3bIfDzdyIAomflRbj4jD-Z1lcfP-7NQ&app=201094746&sync=1&v=beta&ut=1S4fxf2p45tWc1')
->json();
流
1.要在帖子中包含附件,首先您必须通过连接到下面的API URL来注册附件。API会返回一个带有uploadUrl和附件ID的响应。
https://api.linkedin.com/v2/assets?action=registerUpload
1.上述响应中的“uploadUrl”用于上传我们的图像文件,它只返回一个201状态代码。
1.最后,我们在第1步中获得的“id”在包含消息和附件id作为正文的post API请求中用作引用。
我所做的是第二步使用bash,第三步通过 Postman 或Laravel HTTP客户端发出普通API请求。我可以在我的LinkedIn页面上看到帖子。但是当我使用Laravel HTTP客户端的“attach”方法执行第二步和第三步时,它不起作用,永远不会显示帖子。
我从Laravel Docs中了解到的是“file_get_contents”方法将文件数据作为字符串读取,可能我需要以二进制格式进行读取。
https://laravel.com/docs/9.x/http-client
请,任何人,帮助我指导如何做到这一点,因为我有非常少的知识在PHP和Laravel。谢谢!
1条答案
按热度按时间q5lcpyga1#
您需要执行以下操作: