【问题标题】:Get image from HTTP POST with PHP使用 PHP 从 HTTP POST 获取图像
【发布时间】:2012-08-08 19:21:46
【问题描述】:

所以我使用 HTTP POST 通过 Internet 发送图像并将其发送到我服务器上的 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
        )
)

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

编辑 2:

我终于让一切正常了。事实证明,所有内容都已正确格式化我只是遇到了文件图像大小上传限制问题。我发送的图像大约为 8MB,显然我们的服务器无法处理,所以我只是降低了 jpeg 的质量,问题就解决了。然后还有一些权限问题,没有一点点sudo chmod 无法解决。感谢大家的建议和帮助,希望我能接受多个答案!

【问题讨论】:

    标签: php iphone html http post


    【解决方案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

    【讨论】:

    • 好吧,我通过简单地降低正在上传的图像质量解决了整个文件大小问题,现在我只需要解决文件读写权限的问题
    • 好的。我看到您可能需要进一步阅读如何使用 php 处理文件上传。所以我用更多信息编辑了任何答案
    • 非常感谢!我已使用 HTTP POST 方法成功地将图像从 iPhone 上传到我的计算机上。我还能够通过目录和所有这些正确地移动图像,所以一切都应该很好。再次感谢!
    • 您的附加链接已失效。
    【解决方案2】:

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

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

    我只是略过header 函数的表面;您需要在实际案例中添加更多标题。签出:

    【讨论】:

    • 我尝试过这样做,但仍然没有成功。你知道这种东西的任何教程吗?我一直在四处寻找,但似乎找不到任何东西。
    • 问题是我没有本地存储的文件副本,它在 http 帖子中出现。每当我尝试使用这些方法时,它似乎是在本地查找该图像,而不是根据我收到的错误消息从它收到的帖子消息中查找。 '警告:readfile(dummy.jpg):无法打开流:第 11 行的 [服务器目录] 中没有此类文件或目录'
    • 那么...有人通过$_GET 将URL 传递给图像,还是您尝试处理上传并显示上传的文件?
    【解决方案3】:

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

    print_r($_FILES);

    【讨论】:

    • 编辑了我的问题以包括这样做的结果。谢谢
    • 太好了,我看到数组包含名称,但也包含状态 1(不好)的错误,并且文件大小为零。我确信这已经导致您解决问题的最终结果......很乐意提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2013-07-15
    • 2011-03-30
    相关资源
    最近更新 更多