0

サーバー上のこの画像を処理するために、iphoneアプリケーションからPHPサーバーに画像をアップロードする必要があります。サーバーの処理が終了したら、結果の画像をiphoneアプリケーションに返します。

アップロード用のコードはすでに持っていますが、phpサーバーから結果画像を取得してiphoneアプリケーション内に表示することができません

助けてください

これらはここのコードです:

アップロード用のObjective-cコード:

NSString *urlString =[NSString stringWithFormat:@"http://192.168.1.3/TEST%20IPHONE/upload.php"] ;
    NSURL *nsurl =[NSURL URLWithString:urlString];  
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];   
    [request setURL:nsurl];  
    [request setHTTPMethod:@"POST"];

    self.editingImageView.image = nil;
  NSString * filename =  @"cartoonize.png";

    NSMutableData *body = [NSMutableData data];


    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];

    // file
    NSData *imageData = UIImageJPEGRepresentation(self.EditingImage, 90);

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


     [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"userfile\"; filename=\"%@\"\r\n",filename]] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];



    // close form
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // set request body
    [request setHTTPBody:body];




    //return and test

    NSURLConnection * connection = [[NSURLConnection alloc] 
                                    initWithRequest:request
                                    delegate:self startImmediately:NO];

    [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                          forMode:NSDefaultRunLoopMode];
    [connection start];

ここにPHPコードがあります:

<?php
//echo $_FILES["userfile"]["size"];
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["userfile"]["name"]));


if ( ($_FILES["userfile"]["size"] < 200000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["userfile"]["error"] > 0)
    {
    //echo "Return Code: " . $_FILES["userfile"]["error"] . "<br />";
    }
  else
    {



      move_uploaded_file($_FILES["userfile"]["tmp_name"],
      "upload/" . $_FILES["userfile"]["name"]);


// some processing on the image and result image will be saved on this path upload/test.jpg

$file = "upload/test.JPG" ; 
$imageData = utf8_encode(file_get_contents($file));

echo $imageData;

}






  }
else
  {
  echo "Invalid file";
  }





?>

NSUrlConnectionデリゲートメソッドからデータを取得するので、結果はObjective-cコードのNSDataオブジェクトになりますが、このNSDataオブジェクトから画像を取得できません。どう思いますか?

4

1 に答える 1

0

NSURLConnectionリクエストの応答を読み取ることができるデリゲートメソッドを実装していますか?その場合は、を使用しNSMutableDataてサーバーから返されるデータを蓄積し(複数のデリゲート呼び出しに分割される可能性があります)、クライアントでイメージを作成するUIImageなどの方法を使用する必要があります。imageWithData:例えば:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    self.receivedImageData = [NSMutableData dataWithCapacity:[response expectedContentLength]];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.receivedImageData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    UIImage *finishedImage = [UIImage imageWithData:self.receivedImageData];
    self.receivedImageData = nil;
}
于 2012-08-09T17:44:18.767 に答える