2010-11-02 129 views
4

目的:如何使用PHP cURL發送正確的Content-Type圖像?

我想發送使用multipart/form-data多個圖像。以下是我的代碼片段。

問題:

在一個PC中,多部分連接通過正確的MIME頭的Content-Type發送:圖像/ JPEG,但另一臺PC上,MIME頭是內容類型:應用/八位字節。

問:

我怎麼能強迫捲曲來設置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); 

回答

16

使用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); 
+0

但是,這將改變HTTP頭中的內容類型,而不是MIME多部分標題。 PHP cURL似乎使用magic.mime來檢測文件類型並自動奇蹟般地添加Content-Type標頭。不幸的是,magic.mime無法檢測到很多文件類型和簡單的應用程序/八位字節流。 – kjloh 2010-11-11 03:25:33

+0

我明白你的意思了。檢查我更新的答案。 – netcoder 2010-11-11 14:24:11

+0

您也可以設置自定義文件名:'@D:\ globe.jpg; type = image/jpeg; filename = my_picture.jpg' – Shaffe 2015-03-02 10:40:59