iphone SDK: выгрузить изображение с iphone на php-сервер отправить пустой файл? (пример кода ссылки внутри) - PullRequest
4 голосов
/ 21 октября 2010

Я пытаюсь отправить фотографию и местоположение GPS на сервер через PHP

здесь часть PHP: Копировать отсюда Сохранение загруженного файла

Примеры вышесоздайте временную копию загруженных файлов во временной папке PHP на сервере.

Временные скопированные файлы исчезают после завершения сценария.Чтобы сохранить загруженный файл, нам нужно скопировать его в другое место:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Приведенный выше скрипт проверяет, существует ли файл, если нет, он копирует файл в указанную папку.

Примечание. В этом примере файл сохраняется в новую папку с именем «upload»

, теперь обратно в часть iOS, я могу только отправлять данные о местоположении GPS на сервер, это просто, потому что это просто строка.

и вы можете загрузить пример кода здесь

Но изображения нет, я немного поискал и нашел это обсуждение

I напрямуювведите код в кнопку отправки GPS и изображения

самое лучшее, это обратная связь. Я отправил файл успешно или не удалось

это самое большое сообщение, которое я получил после отправки фотографии на сервер

1.Неверный файл

2. Код возврата:Загрузить:Тип:Размер: 0 КбВременный файл:Сохранено в: upload /

Я следую инструкциям по сохранению изображения в NSData

NSData *photoData= UIImageJPEGRepresentation(self.theimageView.image, 1.0);

, а также проверяю, есть ли данные внутри или нет

, так простодобавить этот код в действие кнопки

if (photoData == nil) {
    NSLog(@"The photo is nothing !!!");
}
else {
    NSLog(@"Photo inside !!!!");

Он работает нормально .......

Но как загрузить изображение на сервер ???

может быть, мне нужно дать имя файла и загрузить его ???

но как ...

Я никогда не использую функцию камеры и не загружаю данныедо

Надеюсь, что кто-то может решить эту проблему

Большое спасибо !!!

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

использовать HTTP multipart POST или ASIHTTPRequest


@WebberLai

Save the image to home directory:
 NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"];
    UIImage *img = pickerImage;


// Write a UIImage to JPEG with minimum compression (best quality) 
    [UIImageJPEGRepresentation(img, 0.5) writeToFile:jpgPath atomically:YES];

    NSString *photoPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"];

    request = [ASIFormDataRequest requestWithURL:webServiceUrl];
    [request setPostValue:requestString forKey:@"data"];
    [request setFile:photoPath forKey:@"apiupload"];
    [request startSynchronous];
1 голос
/ 22 октября 2010

Можно добавить это

NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"]; UIImage *img = pickerImage;

[UIImageJPEGRepresentation(img, 0.5) writeToFile:jpgPath atomically:YES];

Но когда я пытаюсь вставить в свою кнопку действие

NSString *photoPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"];

request = [ASIFormDataRequest requestWithURL:webServiceUrl];
[request setPostValue:requestString forKey:@"data"];
[request setFile:photoPath forKey:@"apiupload"];
[request startSynchronous];

Получено много сообщений об ошибках, я думаю, это проблема делегата

первый компилятор говорит "запрос необъявлен" и "ASIFormDataRequest undeclared"

и "requestString undeclared"

Я пытаюсь дать запрос и requestString объявлен

Поэтому я использую ASIFormDataRequest *request; и NSString *requestString;

Это сбрасывает ошибку об "equestString undeclared"

Я не знаю, как объявить ASIFormDataRequest, поэтому это все еще ошибка ...

Правильно ли я поместил это в IBAction ???

Я смотрю какой-то пример здесь

Еще раз спасибо ~ вы действительно хороший парень!

Подробнее Редактировать:

ОК, Вот еще шаг о том, как импортировать необходимые .h .m и рамки

скачать здесь

и импортировать этот заголовок:

ASIHTTPRequestConfig.h

ASIHTTPRequestDelegate.h

ASIProgressDelegate.h

ASICacheDelegate.h

ASIInputStream.h

ASIInputStream.m

ASIHTTPRequest.h

ASIHTTPRequest.m

ASIFormDataRequest.h

ASIFormDataRequest.m

ASINetworkQueue.h

ASINetworkQueue.m

ASIDownloadCache.h

ASIDownloadCache.m

Проекты iPhone также должны включать:

ASIAuthenticationDialog.h

ASIAuthenticationDialog.m

Reachability.h (in the External/Reachability folder)

Reachability.m (in the External/Reachability folder)

, чем импортировать Framework:

CFNetwork

SystemConfiguration.framework

MobileCoreServices.framework

CoreGraphics.framework

libz.1.2.3.dylib

0 голосов
/ 25 октября 2010

ОК, вот небольшая ошибка между iPhone3 и iPhone4 / touch4

@ dhil's Ответ почти верен, вам просто нужно дать правильный ключ (зависит от сервера)

[request setPostValue:requestString forKey:@"data"];
[request setFile:photoPath forKey:@"apiupload"];

Хорошо ... теперь, если вы используете iPhone3, а вы не даете requestString alloc

Работает нормально ~

Но если вы работаете на iPhone4 / touch4, это вызовет EXC_BAD_ACCESS

даже оба устройства - iOS 4.1

Итак ... Надеюсь, этот ответ поможет вам сэкономить время при загрузке изображения на сервер.

...