Поэтому я отправляю изображение через Интернет, используя 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-сервер видит ошибку. Однако я не уверен, что кто-нибудь когда-нибудь переживает нечто подобное?
EDIT 2:
У меня наконец все работает. Оказывается, все было отформатировано правильно. У меня просто была проблема с загрузкой размера файла. Изображения, которые я отправлял, составляли около 8 МБ, и, очевидно, наш сервер не может справиться с этим, поэтому я просто сбил качество в jpeg, и эта проблема была решена. Тогда были некоторые проблемы с разрешениями, также ничего, что-то вроде sudo chmod
не может исправить. Спасибо всем за ваши предложения и помощь, я бы хотел принять более одного ответа!
Код ошибки «1» означает, что изображение, которое вы пытались загрузить, слишком велико. http://php.net/manual/en/features.file-upload.errors.php
Проверьте параметр upload_max_filesize в php.ini.
Я видел, что вы пытаетесь продолжить с $ _FILES ['media'] ['name'], но фактически загруженный файл доступен по пути, указанному в $ _FILES ['media'] ['tmp_name'].
Чтобы убедиться, что вы правильно загружаете свою загрузку, обратитесь к php-документу: http://php.net/manual/en/features.file-upload.post-method.php
Сначала вы должны вывести результат file_get_contents
(1), тогда вам нужно сообщить браузеру, что вы обслуживаете изображение вместо стандартного HTML (2).
echo file_get_contents('dummy.jpg'); // 1 header("Content-Type: image/jpg"); // 2
Я просто просмотрел поверхность для функции header
; вы захотите добавить еще несколько заголовков в реальном мире. Проверять, выписываться:
Проверьте массив $ _FILES на стороне PHP и посмотрите, находится ли ваше изображение там …
Сделайте print_r($_FILES);