使用PHP从HTTP POST获取图像

时间:2012-08-08 19:21:46

标签: php iphone html http post

所以我使用HTTP POST通过互联网发送图像并将其发送到我服务器上的php脚本。我希望能够拍摄该图像并保存。我正在使用文本做得很好,但是当谈到其他内容时,例如图像,它是错误的说它无法找到变量,当我尝试file_get_contents时,它不喜欢它。我也是从iPhone发送图像,所以我的POST请求看起来像这样。

NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Disposition: form-data; name=\"media\"; filename=\"dummy.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Type: image/jpeg\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:imageData];
[postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postRequest setHTTPBody:postBody];

请求的其余部分是写的,但我真的不想发布所有这些内容。

但无论如何,这就是我发送请求的方式,以及在php服务器端,

<?php
    echo "Some Message";
    $nameValue =  $_POST['name'];
    echo "<br/>";
    echo $nameValue;
    $otherValue =  $_POST['other'];
    echo "<br/>";
    echo $otherValue;
    file_get_contents('dummy.jpg');
    // or I tried this
    $imageData = $_POST['media'];
?>

我似乎无法抓住图像。两次尝试获取图像都失败了,我不知道为什么。有什么建议吗?

修改

我添加了打印语句print_r($_FILES)以查看我将获得的内容并返回以下内容。

(
    [media] => Array
        (
            [name] => dummy.jpg
            [type] => 
            [tmp_name] => 
            [error] => 1
            [size] => 0
        )
)

所以看起来好像它正在获取图像,至少是它的名称,但由于某种原因它没有得到实际数据并且抛出了一些错误。我想这可能是在iPhone方面,如果它没有发送数据,我的PHP服务器看到错误。我不确定,有没有人经历过这样的事情?

编辑2:

我终于把一切都搞定了。事实证明,一切都格式正确我只是有一个文件图像大小上传限制问题。我发送的图像大约是8MB,显然我们的服务器无法处理,所以我只是简化了jpeg的质量,这个问题就解决了。然后还有一些权限问题,sudo chmod无法解决任何问题。感谢大家的建议和帮助,我希望我能接受不止一个答案!

3 个答案:

答案 0 :(得分:1)

错误代码“1”表示您尝试上传的图片太大。 http://php.net/manual/en/features.file-upload.errors.php

检查php.ini中的upload_max_filesize设置。

我看到你正在尝试继续使用$ _FILES ['media'] ['name'],但实际上传的文件可以通过$ _FILES ['media'] ['tmp_name']中给出的路径获得。

要确保正确处理上传,请参阅php-docu: http://php.net/manual/en/features.file-upload.post-method.php

答案 1 :(得分:0)

首先,您必须输出file_get_contents(1)的结果,然后您需要告诉浏览器您正在提供图像而不是标准HTML(2)。

echo file_get_contents('dummy.jpg'); // 1
header("Content-Type: image/jpg");   // 2

我只是浏览了header函数的表面;你想在实际案例中添加更多标题。退房:

答案 2 :(得分:0)

检查PHP端的$ _​​FILES数组,看看你的图像是否在那里......

执行print_r($_FILES);