【问题标题】:How to use PHP cURL to send images with the correct Content-Type?如何使用 PHP cURL 发送具有正确 Content-Type 的图像?
【发布时间】:2011-05-03 18:16:21
【问题描述】:

目标:

我想使用 multipart/form-data 发送多张图片。下面是我的代码的 sn-p。

问题:

在一台 PC 上,多部分附件由正确的 MIME 标头 Content-Type:image/jpeg 发送,但在另一台 PC 上,MIME 标头是 Content-Type:application/octet。

问题:

如何强制 cURL 为 MIME 内容设置正确的 Content-Type 标头?

$ch = curl_init();

$params = array('name' => '@D:\globe.jpg');  

$base_url = "https://example.com"."?".varEncode($test_data);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL,$base_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch);

【问题讨论】:

    标签: php curl


    【解决方案1】:

    使用 CURLOPT_HTTPHEADER 选项:

    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: image/jpeg"));
    

    所以专门为文件上传指定 Content-Type 标头,使用:

    $params = array('name'=>'@D:\globe.jpg;type=image/jpeg');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    

    【讨论】:

    • 但这将更改 HTTP 标头上的 Content-Type,而不是 MIME 多部分标头。 PHP cURL 似乎使用 magic.mime 来检测文件类型并自动添加 Content-Type 标头。不幸的是,magic.mime 无法检测到很多文件类型和简单的使用 application/octet-stream。
    • 也可以设置自定义文件名:@D:\globe.jpg;type=image/jpeg;filename=my_picture.jpg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2020-09-30
    • 2013-11-07
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多