Curl 上傳文件時需要設置mime type

剛發現一個問題,使用curl上傳文件的時候,如果不設置mime type,默認的是 application/octet-stream,也就是說如果不設置,就算你上傳的文件是圖片文件,它也會認爲是二進制流,某些服務器如果有根據mime-type進行過濾的操作,那這種文件就會被拒絕,別問我怎麼知道的,我的服務器就是這樣設置的。

指定mime type也很簡單,

Shell

curl -F '[email protected];type=image/png' https://example.com/myapi

 在PHP裏可以這樣寫:

$mime_content_type = mime_content_type($img_path);
$mime_content_type = $mime_content_type == false ? 'image/jpeg' : $mime_content_type; // mime type 檢測失敗fallback到jpeg
$args['img'] =  new CURLFile($img_path,$mime_content_type);

模擬提交:

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$args);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

        $response = curl_exec($ch);
本文在 CC BY-NC-SA 4.0 許可 下發布
  • 署名 - 您可以複製、發行、展覽、表演、放映、廣播或通過信息網絡傳播本作品,但必須 署名作者 並添加鏈接到 原文地址
  • 非商業性使用 — 您不得將本作品用於商業目的。
  • 相同方式共享 — 如果您再混合、轉換或者基於本作品進行創作,您必須基於與原先許可協議相同的許可協議 分發您貢獻的作品。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章