Prześlij obraz na serwer PHP z iOS

Wiem, że to pytanie zostało również zadane wcześniej, ale mój problem jest nieco inny.

Chcę przesłać obraz na serwer PHP i chcę wysłać więcej parametrów wraz z obrazem z iOS. Szukałem w google i znalazłem dwa rozwiązania:

  1. Albo wyślemy obrazek jako Base64 zakodowany łańcuch w JSON. Refered link .

  2. Lub prześlemy obraz na serwer za pomocą danych formularza. Odsyłam ten link . Jeśli ktoś odsyła mnie w ten sposób, więc proszę, pomóż mi dodać więcej parametrów w tym API.

Teraz moje pytanie brzmi, który z nich jest najlepszym sposobem, aby przesłać obraz na serwer i muszę wysłać więcej parametrów (nazwa użytkownika, hasło i więcej szczegółów) w tym samym wywołaniu usługi internetowej.

Z góry dzięki.
Author: Community, 2013-12-22

6 answers

Możesz przesłać obraz z aplikacji iOS do PHP server w następujący sposób:

Używanie Nowego AFNetworking :

#import "AFHTTPRequestOperation.h"
#import "AFHTTPRequestOperationManager.h"

    NSString *stringUrl =@"http://www.myserverurl.com/file/uloaddetails.php?"
    NSString *string =@"http://myimageurkstrn.com/img/myimage.png"       
    NSURL *filePath = [NSURL fileURLWithPath:string];

   NSDictionary *parameters  = [NSDictionary dictionaryWithObjectsAndKeys:userid,@"id",String_FullName,@"fname",String_Email,@"emailid",String_City,@"city",String_Country,@"country",String_City,@"state",String_TextView,@"bio", nil];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager POST:stringUrl parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
     {
         [formData appendPartWithFileURL:filePath name:@"userfile" error:nil];//here userfile is a paramiter for your image 
     }
     success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSLog(@"%@",[responseObject valueForKey:@"Root"]);
         Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:string delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
         [Alert_Success_fail show];     

     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:[error localizedDescription] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
         [Alert_Success_fail show];

     }];

Drugie użycie NSURLConnection:

-(void)uploadImage
    {       
        NSData *imageData = UIImagePNGRepresentation(yourImage);

        NSString *urlString = [ NSString stringWithFormat:@"http://yourUploadImageURl.php?intid=%@",1];

        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:urlString]];
        [request setHTTPMethod:@"POST"];

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

        NSMutableData *body = [NSMutableData data];
        [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", 1]] 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 stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [request setHTTPBody:body];

        [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    }

To w obie strony działa dobrze do przesyłania obrazu z aplikacji do serwera php nadzieję, że to pomoże dla Ciebie.

 38
Author: Nitin Gohel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 16:42:53

Używanie AFNetworking tak to robię:

NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
    [params setObject:@"myUserName" forKey:@"username"];
    [params setObject:@"1234" forKey:@"password"];
    [[AFHTTPRequestOperationLogger sharedLogger] startLogging];
    NSData *imageData;
    NSString *urlStr = [NSString stringWithFormat:@"http://www.url.com"];
    NSURL *url = [NSURL URLWithString:urlStr];

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
       imageData = UIImageJPEGRepresentation(mediaFile, 0.5);


    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:nil parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData)
    {
              [formData appendPartWithFileData:imageData name:@"mediaFile" fileName:@"picture.png" mimeType:@"image/png"];
    }];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request

    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"File was uploaded" message:@""
                                                       delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil];
        [alert show];
    }
    failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
    {
        NSLog(@"request: %@",request);
        NSLog(@"Failed: %@",[error localizedDescription]);
    }];


    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite)
    {
        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
    }];
    [httpClient enqueueHTTPRequestOperation:operation];
 0
Author: Segev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-25 21:19:00

Spróbuj z Restkit

Oto link Restkit Image upload z parametrem

Możesz uzyskać pomoc Restkit tutaj Krok integracji Restkit

 0
Author: korat prashant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-27 12:14:06

Spróbuj tego.

-(void)EchoesPagePhotosUpload
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

    [self startIndicator];
});
//NSLog(@"%@",uploadPhotosArray);
NSMutableArray *uploadPhotosByteArray=[[NSMutableArray alloc] init];
conversionImage= [UIImage imageWithContentsOfFile:[uploadPhotosArray objectAtIndex:0]];

NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
NSLog(@"conversionImage.size.width %f",conversionImage.size.width);
if(conversionImage.size.height>=250&&conversionImage.size.width>=250)
{
    dispatch_async(dispatch_get_main_queue(), ^(void) {
        [self performSelectorInBackground: @selector(LoadForLoop) withObject: nil];        NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
        NSLog(@"conversionImage.size.width %f",conversionImage.size.width);

        for(int img_pos=0;img_pos<[uploadPhotosArray count];img_pos++)
        {
            conversionImage= [UIImage imageWithContentsOfFile:[uploadPhotosArray objectAtIndex:img_pos]];
            NSData *imageData = UIImageJPEGRepresentation(conversionImage,1.0);
            [Base64 initialize];
            NSString *uploadPhotoEncodedString = [Base64 encode:imageData];
            //NSLog(@"Byte Array %d : %@",img_pos,uploadPhotoEncodedString);
            [uploadPhotosByteArray addObject:uploadPhotoEncodedString];

        }
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString *photo_description=[webview stringByEvaluatingJavaScriptFromString:                        @"document.getElementById('UploadPicsDesc').value"];
            NSString *uploadPhotoImageName=@"uploadPhoto.jpg";
            NSDictionary *UploadpicsJsonResponseDic=[WebserviceViewcontroller EchoesUploadPhotos:profileUserId imageName:uploadPhotoImageName Image:uploadPhotosByteArray PhotoDescription:photo_description];
            //NSLog(@"%@",UploadpicsJsonResponseDic);
            NSString *UploadPhotosStatusString=[UploadpicsJsonResponseDic valueForKey:@"Status"];

            NSLog(@"UploadPhotosStatusString :%@",UploadPhotosStatusString);
            NSString *uploadPhotosCallbackstring=[NSString stringWithFormat:@"RefreshForm()"];
            [webview stringByEvaluatingJavaScriptFromString:uploadPhotosCallbackstring];
        });
    });
}
else {
    UIAlertView *ErrorAlert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Please Upload Photo Above 250x250 size" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [ErrorAlert show];
    NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
    NSLog(@"conversionImage.size.width %f",conversionImage.size.width);
}
}
 0
Author: Anilkumar iOS developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 05:12:15
-(void)uploadImage
{

NSString *mimetype = @"image/jpeg";
NSString *myimgname = _txt_fname.text; //@"img"; //upload image with this name in server PHP FILE MANAGER
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *imageDataa = UIImagePNGRepresentation(chooseImg.image);
NSDictionary *parameters =@{@"fileimg":defaults }; //@{@"uid": [uidstr valueForKey:@"id"]};

AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
//here post url and imagedataa is data conversion of image  and fileimg is the upload image with that name in the php code
NSMutableURLRequest *request =
[serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://posturl/newimageupload.php"
                                parameters:parameters
                 constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                     [formData appendPartWithFileData:imageDataa
                                                 name:@"fileimg"
                                             fileName:myimgname
                                             mimeType:mimetype];
                 }];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
                                 success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                     NSLog(@"Success %@", responseObject);
                                     [uploadImgBtn setTitle:@"Uploaded" forState:UIControlStateNormal];
                                     [chooseImg setImage:[UIImage imageNamed:@"invoice-icon.png"]];

                                     if([[responseObject objectForKey:@"status"] rangeOfString:@"Success"].location != NSNotFound)
                                     {
                                         [self alertMsg:@"Alert" :@"Upload sucess"];
                                     }

                                 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                     NSLog(@"Failure %@", error.description);
                                     [chooseImg setImage:[UIImage imageNamed:@"invoice-icon.png"]];
                                     uploadImgBtn.enabled = YES;

                                 }];

// 4. Set the progress block of the operation.
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {

    float myprog = (float)totalBytesWritten/totalBytesExpectedToWrite*100;
    NSLog(@"Wrote %f ", myprog);
}];

// 5. Begin!
[operation start];

}
 0
Author: razesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-13 19:36:53

Spróbuj tego, to jest praca dla mnie.

    NSData *postData = [Imagedata dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:apiString]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSURLResponse *response;
    NSError *err;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];


    NSError *jsonError;
    NSData *objectData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *responseDictft = [NSJSONSerialization JSONObjectWithData:objectData
                                                                   options:NSJSONReadingMutableContainers
                                                                     error:&jsonError];
 0
Author: kalpesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 07:00:22