剛發現一個問題,使用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 許可 下發布
- 署名 - 您可以複製、發行、展覽、表演、放映、廣播或通過信息網絡傳播本作品,但必須 署名作者 並添加鏈接到 原文地址。
- 非商業性使用 — 您不得將本作品用於商業目的。
- 相同方式共享 — 如果您再混合、轉換或者基於本作品進行創作,您必須基於與原先許可協議相同的許可協議 分發您貢獻的作品。