2012-08-08 80 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