Home > Backend Development > PHP Tutorial > php 文件上传,这段报文哪里错了呢

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-06 20:44:24
Original
1133 people have browsed it

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

返回的结果如下:

<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>
Copy after login
Copy after login

代码:

<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>
Copy after login
Copy after login

在这里生成的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>
Copy after login
Copy after login

代码:

<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>
Copy after login
Copy after login

在这里生成的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>
Copy after login

注意 Content-Length: 后面需要有一个空格。

大神,你用这么多header干啥呢??完全看不懂代码、、

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template