2012-08-08 79 views
1

因此,我使用HTTP POST通过互联网发送图像并将其发送到我的服务器上的php脚本。我希望能够拍摄并保存该图像。我对文本做得很好,但是当涉及到其他内容时,例如图像,错误地说它找不到变量,当我尝试file_get_contents时,它也不喜欢这样。我也从iPhone发送图像,所以我的POST请求看起来像这样。使用PHP从HTTP 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无法修复的一点点。感谢大家的建议和帮助,我希望我可以接受多个答案!

回答

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-实况: http://php.net/manual/en/features.file-upload.post-method.php

+0

好了,好吧,我通过简单地降低了正在上传的图像的质量来解决整个文件大小问题,现在我只需要通过文件读写权限问题 – MZimmerman6 2012-08-09 14:53:06

+0

好的。我看到你可能需要进一步阅读如何处理文件上传与PHP。所以我编辑ny回答一些更多的信息 – Jojo 2012-08-09 15:06:50

+0

非常感谢!我已经使用HTTP POST方法成功将图像从iPhone上获取到我的计算机上。我还能够通过目录和所有这些方式正确地移动图像,所以一切都应该很好。再次感谢! – MZimmerman6 2012-08-09 15:23:52

0

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

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

我只脱脂用于header功能表面上;你会想在真实案例中添加更多的头文件。退房:

+0

我试图做这样的事情,但是直到现在我还没有成功。你知道这种东西的任何教程吗?我一直在环顾四周,但似乎无法找到任何东西。 – MZimmerman6 2012-08-08 19:44:08

+0

尝试使用'readfile'而不是'file_get_contents' – wanovak 2012-08-08 19:46:15

+0

问题是我没有本地存储的文件的副本,它在http post中出现。每当我尝试使用这些方法时,就好像它正在本地查找该图像,而不是从收到的发布消息中,基于我得到的错误消息。 '警告:readfile(dummy.jpg):未能打开流:没有这样的文件或目录在[服务器目录]第11行' – MZimmerman6 2012-08-08 19:51:40

0

检查在PHP端的$ _​​FILES数组,看看你的形象就在那里......

print_r($_FILES);

+0

编辑我的问题,包括这样做的结果。谢谢 – MZimmerman6 2012-08-09 14:09:26

+0

太棒了,我看到数组包含名称,但也包含状态1的错误(不好),并且文件的大小为零。我相信这会导致你解决问题的最终结果......乐于帮助! – ElasticThoughts 2012-08-09 18:42:00