PHP curl 模擬表單數(shù)據(jù)流multipart/form-data上傳文件

在調(diào)用公眾號(hào)接口https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$token."&type=".$type;

上傳永久素材文件總是返回"{\"errcode\":41005,\"errmsg\":\"media data missing\"}"

經(jīng)過多次測(cè)試使用下面的方式,可以正常上傳

//調(diào)用測(cè)試

protected static $url;

protected static $delimiter;

protected static $instance;

public function index()

{

? ? ? ? static::$delimiter = uniqid();

$basename = Request::instance()->root();

if (pathinfo($basename, PATHINFO_EXTENSION) == 'php') {

? ? $basename = dirname($basename);

}

? ? ? ? $result=$this->wxAddMaterial($token,$basename.'/upload/images/gnlog.jpg','image');

? ? }



// 新增其他類型永久素材

public function wxAddMaterial($token,$filename='',$type='') {

? ? // 設(shè)置請(qǐng)求參數(shù)

? ? static::$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$token."&type=".$type;

? ? $filePath = str_replace('\\', '/', $filename);

? ? // 發(fā)送請(qǐng)求

? ? $imginfo=pathinfo($filePath);

? ? $fields = array(

? ? ? ? 'media'=>file_get_contents(".".$filePath),

? ? ? ? 'filename'=>$imginfo["basename"],

);

? ? $res = $this->putPart( $fields);

? ? // 發(fā)送請(qǐng)求

? ? return $res;

}



//推送文件流

public function putPart($param) {

? ? $post_data = static::buildData($param);

? ? $curl = curl_init(static::$url);

? ? curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

? ? curl_setopt($curl, CURLOPT_POST, true);

? ? curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);

? ? curl_setopt($curl, CURLOPT_HTTPHEADER, [

? ? ? ? "Content-Type: multipart/form-data; boundary=" . static::$delimiter,

? ? ? ? "Content-Length: " . strlen($post_data)

]);

? ? $response = curl_exec($curl);

? ? curl_close($curl);

? ? return $response;

}


//編譯請(qǐng)求頭格式和數(shù)據(jù)流

private static function buildData($param){

? ? $data = '';

? ? $eol = "\r\n";

? ? $upload = $param['media'];

? ? unset($param['media']);

? ? foreach ($param as $name => $content) {

? ? ? ? $data .= "--" . static::$delimiter . "\r\n"

? ? ? ? ? ? . 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n"

? ? ? ? ? ? . $content . "\r\n";

}

? ? $data .= "--" . static::$delimiter . $eol

? ? ? ? . 'Content-Disposition: form-data; name="media"; filename="' . $param['filename'] . '"' . "\r\n"

? ? ? ? . 'Content-Type:application/octet-stream'."\r\n\r\n";

? ? $data .= $upload . "\r\n";

? ? $data .= "--" . static::$delimiter . "--\r\n";

? ? return $data;

}


根據(jù)自己的實(shí)際情況稍作修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尉间,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異系任,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)虐块,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門俩滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贺奠,你說我怎么就攤上這事霜旧。” “怎么了儡率?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挂据,是天一觀的道長(zhǎng)以清。 經(jīng)常有香客問我,道長(zhǎng)崎逃,這世上最難降的妖魔是什么掷倔? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮个绍,結(jié)果婚禮上勒葱,老公的妹妹穿的比我還像新娘。我一直安慰自己巴柿,他們只是感情好凛虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篮洁,像睡著了一般涩维。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袁波,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天瓦阐,我揣著相機(jī)與錄音,去河邊找鬼篷牌。 笑死睡蟋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枷颊。 我是一名探鬼主播戳杀,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼夭苗!你這毒婦竟也來了信卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤题造,失蹤者是張志新(化名)和其女友劉穎傍菇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體界赔,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丢习,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淮悼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐低。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袜腥,靈堂內(nèi)的尸體忽然破棺而出见擦,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布鲤屡,位于F島的核電站儡湾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏执俩。R本人自食惡果不足惜徐钠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望役首。 院中可真熱鬧尝丐,春花似錦、人聲如沸衡奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矮固。三九已至失息,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間档址,已是汗流浹背盹兢。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留守伸,地道東北人绎秒。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尼摹,于是被迫代替她去往敵國(guó)和親见芹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1蠢涝、二維數(shù)組按照指定字段排序 /***排序二維數(shù)組*@param$arrUsers 排序數(shù)組*@params...
    Mr_Z_Heng閱讀 209評(píng)論 0 2
  • 最近玄呛,要抓取一些公眾號(hào)的文章以及將里面的視頻和視頻封面搞下來,這個(gè)問題已解決和二,直接上代碼 我是用Yii2.0框架的...
    chinariver閱讀 11,881評(píng)論 1 2
  • cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具徘铝,支持很多協(xié)議和選項(xiàng),如HTTP儿咱、FTP庭砍、TELNET等场晶,能...
    司馬東陽閱讀 1,437評(píng)論 0 6
  • 今天試寫微信的一個(gè)方法剛開始用CURLFlie類混埠,死活用不了,結(jié)果是少了一個(gè)“\” 如果不用use在前面引入一定...
    吳孝青閱讀 1,281評(píng)論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)诗轻、焦點(diǎn)钳宪、注意力、語言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析吏颖,社會(huì)...
    Jenaral閱讀 5,716評(píng)論 0 5