首頁 >後端開發 >php教程 >php 文件上传,这段报文哪里错了呢

php 文件上传,这段报文哪里错了呢

WBOY
WBOY原創
2016-06-06 20:44:241112瀏覽

看了很多例子 没解决问题,大家帮我看看呢

返回的结果如下:

<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干啥呢??完全看不懂代码、、

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn