Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在ios中通过JSON在Web服务器上上载图像_Php_Ios_Objective C_Image_Webserver - Fatal编程技术网

使用PHP在ios中通过JSON在Web服务器上上载图像

使用PHP在ios中通过JSON在Web服务器上上载图像,php,ios,objective-c,image,webserver,Php,Ios,Objective C,Image,Webserver,我有一个应用程序,我上传用户的数据在Web服务器上 我使用下面的代码将数据通过下面的代码传递到webserver -(IBAction)btnRegister:(id)sender { jsonSP = [SBJSON new]; jsonSP.humanReadable = YES; NSString *service = @"/register.php"; NSData *imageData = UIImagePNGRepresentation([UIIm

我有一个应用程序,我上传用户的数据在Web服务器上

我使用下面的代码将数据通过下面的代码传递到webserver

-(IBAction)btnRegister:(id)sender
{
    jsonSP = [SBJSON new];
    jsonSP.humanReadable = YES;

     NSString *service = @"/register.php";
    NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"register_btn.png"]);
    [Base64 initialize];
    NSString *imageString = [Base64 encode:imageData];
    NSLog(@"%@",imageString);


    NSString *requestString = [NSString stringWithFormat:@"{\"?username\"=\"%@\"&\"user_password\"=\"%@\"&\"first_name\"=\"%@\"&\"email\"=\"%@\"&\"profile_photo_link\"=\"%@\"\"}",@"Test",@"Test",@"Test",@"Test@mmm.com",imageString];
    NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];

    NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"];
    NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc];
    NSString *urlLoc = [fileContents objectForKey:@"URL"];
     urlLoc = [urlLoc stringByAppendingString:service];
    NSLog(@"URL : %@",urlLoc);
   // urlLoc = [urlLoc stringByAppendingString:@"?username=abcd&password=abcd"];
    urlLoc = [urlLoc stringByAppendingString:requestString];
    urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"{" withString:@""];
    urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"}" withString:@""];
    urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"\"" withString:@""];
    NSLog(@"URL : %@",urlLoc);
    // [fileContents release]; //o_r
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: urlLoc]];
    NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
    [request setHTTPMethod: @"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody: requestData];

    //    self.connection = [NSURLConnection connectionWithRequest:request delegate:self];

    NSError *respError = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];
    NSLog(@"response is %@",returnData);


    // [request release];
    if (respError)
    {
        //[customSpinner hide:YES];

        UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Internet connection is not Available!" message:@"Check your network connectivity" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alt show];
        //[alt release];


    }
    else
    {
        NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
        NSLog(@"response string %@",responseString);
    }
}
我能够成功地将数据发送到Web服务器而不需要映像

但是,如果通过编码Base64上传带有上面所示代码的图像,则数据不会上传到Web服务器上它在NSLog中告诉我一个错误,请求查询字符串太长。

我已经导入了Base64.h和.m文件

我还想用图像传递数据

我该怎么做

我知道有很多链接,但我想通过这种方式传递,所以请告诉我我在这里做错了什么

请帮帮我


提前感谢。

嘿,Manthan尝试下面的代码将
UIImage
转换为
NSString
,然后将其传递给服务器

        UIImage *imgPic =[UIImage imageNamed:@"register_btn.png"];
        NSData * imageData =  UIImagePNGRepresentation(imgPic);
        NSString *base64String = [imageData base64EncodedStringWithOptions:0];

这是一个服务器问题,它会告诉你这个错误

json没有最大长度,但可以发送的数据量是最大的。要解决这个问题,只需在.htaccess文件中设置可以发送的数据量:
php\u value post\u max\u size 20M

编辑

此外,如果您有权访问php.ini,您可以在
post\u max\u size
行中更改它

- (void)addNewItem:(SH_NewItem *)newItem withCompletitionBlock:(void(^)(NSArray *items, NSError *error, NSDictionary *userInfo))completitionBlock
{
    AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[[SH_Shared sharedInstance] getBaseURL]]];

    //main cover image...
    NSData *imageData = UIImageJPEGRepresentation(newItem.image, JPEG_IMAGE_QUALITY);


    NSData *imageData1 = UIImageJPEGRepresentation(newItem.image1, JPEG_IMAGE_QUALITY);
    NSData *imageData2 = UIImageJPEGRepresentation(newItem.image2, JPEG_IMAGE_QUALITY);
    NSData *imageData3 = UIImageJPEGRepresentation(newItem.image3, JPEG_IMAGE_QUALITY);
    NSData *imageData4 = UIImageJPEGRepresentation(newItem.image4, JPEG_IMAGE_QUALITY);

    NSDictionary *params  = [[NSDictionary alloc]init];

   params = [NSDictionary dictionaryWithObjectsAndKeys:
                            newItem.title, @"title",
                            newItem.itemDescription, @"description",
                            [[SH_Shared sharedInstance] token], @"token",
                            nil];

    NSLog(@"params-%@",params);

    NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"new_item" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
        if (imageData != nil)
            [formData appendPartWithFileData:imageData name:@"images[0]" fileName:@"image_ad.png" mimeType:@"multipart/form-data"];


        if (imageData1 != nil)
            [formData appendPartWithFileData:imageData1 name:@"images[1]" fileName:@"image_ad1.png" mimeType:@"multipart/form-data"];
        if (imageData2 != nil)
            [formData appendPartWithFileData:imageData2 name:@"images[2]" fileName:@"image_ad2.png" mimeType:@"multipart/form-data"];
        if (imageData3 != nil)
            [formData appendPartWithFileData:imageData3 name:@"images[3]" fileName:@"image_ad3.png" mimeType:@"multipart/form-data"];
        if (imageData4 != nil)
            [formData appendPartWithFileData:imageData4 name:@"images[4]" fileName:@"image_ad4.png" mimeType:@"multipart/form-data"];

    }];


    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [self getDataWithOperation:op completitionBlock:^(NSData *data, NSError *error, NSDictionary *userInfo) {
        CJSONDeserializer *deserializer = [CJSONDeserializer deserializer];

        NSError *deserializeError = nil;

        NSString *str = [[NSString alloc]  initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"Response: %@", str);


     NSDictionary *requestResponseDict = [deserializer deserialize:data error:&deserializeError];

        NSString *status = [requestResponseDict valueForKey:kStatus];

        BOOL isSuccess = [[status valueForKey:kSuccess] boolValue];

        if (isSuccess)
        {
            // it's OK

        }
        else
        {
            // its error
        }
    }];
}
-(void)addNewItem:(SH_NewItem*)带有completionblock的NewItem:(void(^)(NSArray*items,NSError*error,NSDictionary*userInfo))completionblock
{
AFHTTPClient*client=[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[[SH_Shared sharedInstance]getBaseURL]];
//主封面图片。。。
NSData*imageData=UIIMAGEJPEG表示法(newItem.image,JPEG图像质量);
NSData*imageData1=UIIMAGEJPEGREPORATION(newItem.image1,JPEG图像质量);
NSData*imageData2=UIIMAGEJPEGREPORATION(newItem.image2,JPEG图像质量);
NSData*imageData3=UIIMAGEJPEGREPORATION(newItem.image3,JPEG图像质量);
NSData*imageData4=UIIMAGEJPEGREPORATION(newItem.image4,JPEG图像质量);
NSDictionary*params=[[NSDictionary alloc]init];
params=[NSDictionary Dictionary WithObjectsAndKeys:
newItem.title,@“title”,
newItem.itemsdescription,@“description”,
[[SH_sharedInstance]令牌],@“令牌”,
零];
NSLog(@“参数-%@”,参数);
NSMutableURLRequest*request=[客户端multipartFormRequestWithMethod:@“POST”路径:@“new_item”参数:params constructingBodyWithBlock:^(id formData){
如果(imageData!=nil)
[formData appendPartWithFileData:imageData名称:@“images[0]”文件名:@“image_ad.png”mimeType:@“multipart/form data”];
如果(imageData1!=nil)
[formData appendPartWithFileData:imageData1名称:@“images[1]”文件名:@“image_ad1.png”mimeType:@“multipart/form data”];
如果(imageData2!=nil)
[formData appendPartWithFileData:imageData2名称:@“images[2]”文件名:@“image_ad2.png”mimeType:@“multipart/form data”];
如果(imageData3!=nil)
[formData appendPartWithFileData:imageData3名称:@“images[3]”文件名:@“image_ad3.png”mimeType:@“multipart/form data”];
如果(imageData4!=nil)
[formData appendPartWithFileData:imageData4名称:@“images[4]”文件名:@“image_ad4.png”mimeType:@“multipart/form data”];
}];
AFHTTPRequestOperation*op=[[AFHTTPRequestOperation alloc]initWithRequest:request];
[self-getDataWithOperation:op CompletionBlock:^(NSData*数据,NSError*错误,NSDictionary*用户信息){
CJSONDeserializer*反序列化器=[CJSONDeserializer反序列化器];
n错误*反序列化错误=nil;
NSString*str=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSLog(@“响应:%@”,str);
NSDictionary*requestResponseDict=[反序列化程序反序列化:数据错误:&反序列化错误];
NSString*状态=[requestResponseDict valueForKey:kStatus];
BOOL issucess=[[status valueForKey:ksucces]boolValue];
如果(isSuccess)
{
//没关系
}
其他的
{
//它的错误
}
}];
}

我使用以下代码和多部分表单数据完成了这项工作

responseData = [NSMutableData data];
    NSString *service = @"http:///registerUser.php";

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:service]];
    [request setHTTPMethod:@"POST"];
//创建边界

NSString *boundary = @"---------------------------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:[@"Content-Disposition: form-data; name=\"profile_photo_link\"; filename=\"ipodfile.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

 UIImageView *imgvUserImage = [[UIImageView alloc]init];
    imgvUserImage.image= [UIImage imageNamed:@"register_btn.png"];

    NSData * imageData=[NSData dataWithData:UIImagePNGRepresentation(imgvUserImage.image)];

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


[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"username\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[[NSString stringWithFormat:@"%@",txtUserName.text] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
//将立柱主体设置为要求

 [request setHTTPBody:body];
    postconnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
**回应

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];
}

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

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [self removeProgressIndicator];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    if (connection == postconnection)
    {
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        NSLog(@"%@",responseString);
        //   NSDictionary *deserializedData = [responseString objectFromJSONString];
        //  NSString *string = [deserializedData objectForKey:@"Status"];


    }
}

谢谢你,伙计。我会检查并让你知道。我仍然收到错误消息,请求字符串太长,因为我在NSLog中得到太长的base64String。你知道如何通过多路径数据发送图像吗?如果是,请帮忙。释放hoy来帮助kar ne bhai。@o Pi:所以我的代码是正确的,但在web服务器端,我需要对其进行更改。好吗?我的意思是,在上面的代码中,我不需要更改任何东西,只需要更改服务器端代码。是的,没错。您可以选择在.htaccess文件或php中执行此操作。ini@oPi:是的,我们正在努力。一旦修好了,我一定会让你知道的。