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

发布于 2022-08-29 18:16:15 字数 2539 浏览 16 评论 0

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

返回的结果如下:

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 

代码:

<?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);
?>

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怪异←思 2022-09-05 18:16:15

问题在于单引号和双引号的区别

微暖i 2022-09-05 18:16:15
$head.="Content-Length: ".strlen($data)."\r\n\r\n";

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

夏九 2022-09-05 18:16:15

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文