如何停止 PHP cURL 上传将 "Boundary" 插入 "Content-Type" 字段?

How to stop PHP cURL upload inserting "Boundary" into the "Content-Type" field?

我使用以下代码将 MP4 文件上传到网络服务,使用 PHP cURL。

我在 CURLOPT_HTTPHEADER 中将 'Content-Type' 指定为 'video/mp4'。

不幸的是,上传文件后,在服务中为其存储的 'Content-Type' 显示为:"content_type":"video/mp4; boundary=----WebKitFormBoundaryfjNZ5VkJS8z3CB9X"

如您所见,'boundary' 已插入到 'content_type' 中。

当我下载文件时,它无法播放,并显示 'file unsupported/file extension incorrect/file corrupt' 消息。

$authorization = "Authorization: Bearer [token]"; 

$args['file'] = curl_file_create('C:\example\example.mp4','video/mp4','example');

$url='[example web service URL]';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data', 'Accept: application/vnd.mendeley-content-ticket.1+json', $authorization)); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $args);

$response = curl_exec($ch); // URL encoded output - needs to be URL encoded to get the HREF link header
curl_close($ch);

非常感谢任何帮助、建议或指点!

也许 API 不期望 POST 多部分,但正文本身的实际内容:

参考:

您需要使用 PUT 方法将文件的实际内容放入正文中 - 如果您使用 POST,它会尝试以表单形式发送。

$authorization = "Authorization: Bearer [token]"; 
$file = 'C:\example\example.mp4';
$infile = fopen($file, 'r');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "https://api.mendeley.com/file_contents");
curl_setopt($ch, CURLOPT_PUT,            1 ); // needed for file upload
curl_setopt($ch, CURLOPT_INFILESIZE,     filesize($file));
curl_setopt($ch, CURLOPT_INFILE,         $infile);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,  'POST' );
curl_setopt($ch, CURLOPT_POST,           1);
curl_setopt($ch, CURLOPT_HTTPHEADER,     array('Content-Type: video/mp4', 'Accept: application/vnd.mendeley-content-ticket.1+json', $authorization)); 

curl_setopt($ch, CURLOPT_HEADER,         0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result=curl_exec ($ch);