Heim >Backend-Entwicklung >PHP-Tutorial >php 文件上传,这段报文哪里错了呢

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

WBOY
WBOYOriginal
2016-06-06 20:44:241109Durchsuche

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

返回的结果如下:

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn