看了很多例子 没解决问题,大家帮我看看呢
返回的结果如下:
<code>HTTP/1.1 400 Bad Request Date: Fri, 18 Jul 2014 18:15:46 GMT Server: nginx/1.4.4 Content-Type: application/json Content-Length: 36 Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size Access-Control-Allow-Methods: OPTIONS, HEAD, POST Access-Control-Allow-Origin: * Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache X-Content-Type-Options: nosniff X-Log: UP/400 X-Reqid: QkEAAC2bX1liE4IT X-Via: 1.1 js41:3 (Cdn Cache Server V2.0) Connection: close </code>
代码:
<code class="lang-php"><?php //test100.jpg就在当前目录下 function sock_post($url){ $boundary = "---------".substr(md5(rand(0,32000)),0,10); $content_file=file_get_contents('test100.jpg'); $token="XXXXXXX"; $key="chrisliu"; $file_name="test100.jpg"; $info=parse_url($url); $fp=fsockopen($info["host"],80,$errno,$errstr,3); $head="POST / HTTP/1.1\r\n"; $head.="Host: ".$info['host']."\r\n"; $head.="Content-type: multipart/form-data; boundary=".$boundary."\r\n"; $data="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name=\"token\"\r\n'; $data.=$token."\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name="key"\r\n'; $data.=$key."\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name="x:username"\r\n'; $data.="\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name=\"file\"; filename=\"'.$file_name.'\"\r\n'; $data.="Content-Type: application/octet-stream\r\n"; $data.="Content-Transfer-Encoding: binary\r\n"; $data.=$content_file."\r\n"; $data.="--".$boundary."--\r\n"; $head.="Content-Length:".strlen($data)."\r\n\r\n"; $write=fputs($fp,$head.$data);//发出请求 while(!feof($fp)){ $line=fgets($fp); echo $line."<br>"; } fclose($fp); } $purl="http://upload.qiniu.com"; echo "以下是POST方式的响应内容:<br>"; sock_post($purl); ?> </code>
在这里生成的token
http://jsfiddle.net/gh/get/extjs/4.2/icattlecoder/jsfiddle/tree/master/uptoken
在这里测试上传成功
http://jsfiddle.net/gh/get/library/pure/icattlecoder/jsfiddle/tree/master/formupload
看了很多例子 没解决问题,大家帮我看看呢
返回的结果如下:
<code>HTTP/1.1 400 Bad Request Date: Fri, 18 Jul 2014 18:15:46 GMT Server: nginx/1.4.4 Content-Type: application/json Content-Length: 36 Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size Access-Control-Allow-Methods: OPTIONS, HEAD, POST Access-Control-Allow-Origin: * Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache X-Content-Type-Options: nosniff X-Log: UP/400 X-Reqid: QkEAAC2bX1liE4IT X-Via: 1.1 js41:3 (Cdn Cache Server V2.0) Connection: close </code>
代码:
<code class="lang-php"><?php //test100.jpg就在当前目录下 function sock_post($url){ $boundary = "---------".substr(md5(rand(0,32000)),0,10); $content_file=file_get_contents('test100.jpg'); $token="XXXXXXX"; $key="chrisliu"; $file_name="test100.jpg"; $info=parse_url($url); $fp=fsockopen($info["host"],80,$errno,$errstr,3); $head="POST / HTTP/1.1\r\n"; $head.="Host: ".$info['host']."\r\n"; $head.="Content-type: multipart/form-data; boundary=".$boundary."\r\n"; $data="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name=\"token\"\r\n'; $data.=$token."\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name="key"\r\n'; $data.=$key."\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name="x:username"\r\n'; $data.="\r\n"; $data.="--".$boundary."\r\n"; $data.='Content-Disposition: form-data; name=\"file\"; filename=\"'.$file_name.'\"\r\n'; $data.="Content-Type: application/octet-stream\r\n"; $data.="Content-Transfer-Encoding: binary\r\n"; $data.=$content_file."\r\n"; $data.="--".$boundary."--\r\n"; $head.="Content-Length:".strlen($data)."\r\n\r\n"; $write=fputs($fp,$head.$data);//发出请求 while(!feof($fp)){ $line=fgets($fp); echo $line."<br>"; } fclose($fp); } $purl="http://upload.qiniu.com"; echo "以下是POST方式的响应内容:<br>"; sock_post($purl); ?> </code>
在这里生成的token
http://jsfiddle.net/gh/get/extjs/4.2/icattlecoder/jsfiddle/tree/master/uptoken
在这里测试上传成功
http://jsfiddle.net/gh/get/library/pure/icattlecoder/jsfiddle/tree/master/formupload
<code>$head.="Content-Length: ".strlen($data)."\r\n\r\n"; </code>
注意 Content-Length:
后面需要有一个空格。
大神,你用这么多header干啥呢??完全看不懂代码、、