You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedIn媒体上传API报错:请求非多部分请求(400状态码)

解决LinkedIn API上传图片的"非multipart请求"错误

嘿,这个错误我之前踩过坑!LinkedIn的media/upload接口明确要求请求必须是multipart/form-data格式,你当前的curl请求没配置对这个格式,所以才返回400错误。我给你拆解下问题和解决办法:

问题根源

你现在的请求没有以multipart格式发送数据,LinkedIn服务器识别不到正确的请求体结构,直接判定请求无效。另外可能你对接口用法有点误解:这个接口是用来直接上传图片文件内容的,不是上传图片的URL——如果要关联自有服务器的图片,得先把图片内容传上去拿到媒体ID,再在后续的帖子接口里用这个ID。

修正后的代码示例

我给你调整了代码,重点处理multipart请求的配置:

$curl1 = curl_init();
$m_url = "https://api.linkedin.com/media/upload";

// 先从自有服务器获取图片内容(如果是本地文件就直接用路径)
$imageContent = file_get_contents($medias[0]);
$base64Image = base64_encode($imageContent);

$curl_header = array(
    "Authorization: Bearer " . $access_token
);

// 构建multipart请求数据,这里推荐两种方式:
// 方式1:用CURLFile(如果图片在本地服务器)
// $postFields = array(
//     'media' => new CURLFile(realpath('/path/to/your/image.jpg')),
//     'name' => 'My Uploaded Image',
//     'filename' => 'image.jpg'
// );

// 方式2:用base64编码的媒体数据(适合从远程服务器获取内容的情况)
$postFields = array(
    'media_data' => $base64Image,
    'name' => basename($medias[0]),
    'filename' => basename($medias[0])
);

// 关键curl配置
curl_setopt($curl1, CURLOPT_URL, $m_url);
curl_setopt($curl1, CURLOPT_HTTPHEADER, $curl_header);
curl_setopt($curl1, CURLOPT_POST, true);
// 传入关联数组时,curl会自动设置multipart/form-data格式,不用手动加Content-Type
curl_setopt($curl1, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curl1);
$error = curl_error($curl1);
curl_close($curl1);

if ($error) {
    echo "CURL Error: " . $error;
} else {
    print_r($response);
}

几个关键注意点

  • 不要手动设置Content-Type: multipart/form-data,因为curl会自动生成正确的边界值,手动设置反而容易出错。
  • 如果图片在本地,优先用CURLFile类,这是PHP处理multipart文件上传的标准方式,兼容性更好。
  • 上传成功后,你会拿到一个媒体ID,后续创建LinkedIn帖子时,需要在请求体里引用这个ID来关联图片。

内容的提问来源于stack exchange,提问作者Sruthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:05