如何在PHP中获取或POST多部分数据请求 [英] how to GET or POST multipart data request in PHP

查看:126
本文介绍了如何在PHP中获取或POST多部分数据请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从iOS发送多部分请求以在服务器上上传图像或doc文件。
我的请求就像

I am sending multipart request from iOS to upload image or doc file on server. My request is like

    UIImage *im = [UIImage imageNamed:@"57X57.png"];
    NSData *imageData = UIImageJPEGRepresentation(im, 90);
    NSString *urlString = @"my URL/upload.php";


    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];

    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    NSString *imgName = @"raj.png";
    NSLog(@"image name : %@",imgName);

    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=\"files\"; filename=\"%@\"\r\n", imgName]] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[@"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];
    NSLog(@"setRequest : %@", request);


    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(@"returnstring is : %@",returnString);

和PHP结束时

<?php
    print_r($_FILES);
    print_r($_POST);
?>

当我写 print_r($ _ FILES)时,它会给我输出iOS结束

When I write print_r($_FILES) it will give me output at iOS end as

returnstring is : Array
(
    [files] => Array
        (
            [name] => raj.png
            [type] => application/octet-stream
            [tmp_name] => /tmp/phpI93DO3
            [error] => 0
            [size] => 366784
        )
)
{"success":1}

但是在PHP服务器端,数组是空的,即Array()。

But at PHP server side the array is empty i.e Array().

我是网络新手PHP中的服务开发。请建议我哪里错了。
我对iOS端代码非常有信心(即向服务器发送多部分请求),因为我使用相同的代码将多部分数据上传到基于java的Web服务(java中的RESTFull Web服务)但是我对PHP知之甚少侧。
请指导我如何在PHP结束时获取多部分请求。

I am new to web service development in PHP. Please suggest me where I am wrong. I am very confident about iOS side code (i.e sending multipart request to server) because I used the same code to upload multipart data to java based web service (RESTFull web service in java) But I not having much knowledge about PHP side. Please guide me how would I fetch multipart request at PHP end.

推荐答案

您好请查看[link] < a href =https://stackoverflow.com/questions/20698986/trouble-passing-variables-to-php-script-on-image-upload/20699710#20699710>在图像上传时将变量传递给PHP脚本的麻烦我已经发布了这个问题的答案已经PHP代码也在评论中

Hi please check this [link] Trouble Passing Variables to PHP Script on Image Upload I have posted an answer for this issue already PHP code is also there in comments

供您参考

PHP代码

$uploaddir = "../images/profile_images/";  
$file = basename($_FILES['image']['name']);  
$uploadfile = $uploaddir . $file;   
if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile))  
{  
    $updt_img = "UPDATE tiny_users SET profile_photo = '".$file."' WHERE user_id = '".$final_res[1]."'";  
    mysql_query($updt_img);  
}

要将多个图像上传到服务器,请使用以下代码

To upload multiple images to server use below code

-(void)uploadMultiplePics  
{   
NSString *string ;   
NSData *imageData;   
NSString*urlString=[NSString stringWithFormat:@"http://******"];   
// urlString=[urlString stringByReplacingOccurrencesOfString:@" " withString:@""];   
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];   
[request setURL:[NSURL URLWithString:urlString]];    
[request setHTTPMethod:@"POST"];   
NSMutableData *body;   
body = [NSMutableData data];  
for(int j=0;j < scrollViewImageArray.count;j++)   // scrollViewImageArray is images count    
{      
double my_time = [[NSDate date] timeIntervalSince1970];   
int k=j+1;    
NSString *imageName = [NSString stringWithFormat:@"%d%d",j,(int)(my_time)];   
NSString *imagetag=[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image%d\"; filename=\"",k];   
string = [NSString stringWithFormat:@"%@%@%@", imagetag, imageName, @".jpg\"\r\n\""];  
NSString *boundary = @"---------------------------14737809831466499882746641449";   
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];   
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];    
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];   
[body appendData:[[NSString stringWithString:string] dataUsingEncoding:NSUTF8StringEncoding]];   
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];   
UIImage *image=[[UIImage alloc]init];   
image=[scrollViewImageArray objectAtIndex:j];   
//  scrollViewImageArray images array   
imageData = UIImageJPEGRepresentation(image, 90);      
[body appendData:[NSData dataWithData:imageData]];   
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];     
}   
[request setHTTPBody:body];   
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];   
NSString*s=   [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];    

}

希望这会对你有所帮助。

Hope this will help you.

这篇关于如何在PHP中获取或POST多部分数据请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆