0

我正在尝试在 Mastodon(特别是在 Humblr)上发布图像,但我无法获取 media_id,响应为空,但我不确定问题出在哪里。

我可以发布文本,没问题,所以身份验证部分很好,我只有图像的问题,我在文档中看到的唯一区别是“使用 multipart/form-data 编码的媒体文件”。到目前为止,这是我的代码...

$headers = ['Authorization: Bearer '.$settings['access_token'] , 'Content-Type: multipart/form-data'];

  $mime_type = mime_content_type($urlImage);                     
  $cf = curl_file_create($urlImage,$mime_type,'file');
  $media_data = array(  "file" => $cf);

  $ch_status = curl_init();
  curl_setopt($ch_status, CURLOPT_URL, "https://humblr.social/api/v1/media");   
  curl_setopt($ch_status, CURLOPT_POST, 1);
  curl_setopt($ch_status, CURLOPT_POSTFIELDS, $media_data);
  curl_setopt($ch_status, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch_status, CURLOPT_HTTPHEADER, $headers);

  $media_status = json_decode(curl_exec($ch_status));
  echo "Response: ".json_encode($media_status);

从中我想提取 $media_status-> media_id

老实说,我对“多部分/表单数据”了解不多。我错过了什么吗?

4

1 回答 1

1

这对我来说也需要一些试验和错误。这对我有用(PHP 7.3):

$curl_file = curl_file_create('/path/to/file.jpg','image/jpg','file.jpg');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://instanceurl.com/api/v1/media');

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer YOUR_TOKEN_HERE',
  'Content-Type: multipart/form-data'
]);

$body = [
  'file' => $curl_file
];

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

$response = curl_exec($ch);

if (!$response) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

curl_close($ch);

于 2019-08-06T06:08:37.077 回答