在Xcode和ios中上载图像问题

在Xcode和ios中上载图像问题,ios,objective-c,Ios,Objective C,我正在使用以下代码,因为我是xcode新手,请告诉我如何发送带有数据的图像。数据正完美地发布到服务器。只需添加代码,即可将图像发送到服务器: - (IBAction)senddatatophp:(id)sender { NSLog(@"Working insert button"); NSString *did = [[NSUserDefaults standardUserDefaults] objectForKey:@"deviceID"]; NSString *d

我正在使用以下代码,因为我是xcode新手,请告诉我如何发送带有数据的图像。数据正完美地发布到服务器。只需添加代码,即可将图像发送到服务器:

- (IBAction)senddatatophp:(id)sender {

    NSLog(@"Working insert button");

    NSString *did = [[NSUserDefaults standardUserDefaults] objectForKey:@"deviceID"];
    NSString *deviceTokenStr = [[[[did description]
                                  stringByReplacingOccurrencesOfString: @"<" withString: @""]
                                 stringByReplacingOccurrencesOfString: @">" withString: @""]
                                stringByReplacingOccurrencesOfString: @" " withString: @""];

    //NSLog(@"%@", deviceTokenStr);

    NSData *getimgdata1 = UIImageJPEGRepresentation(_frontimg.image, 1);
    NSLog(@"%@", getimgdata1);


    NSString *name=@"Admin";
    NSString *lastname=@"panel";

    NSString *tag       =   @"watchlist";
    NSString *gcmid     =   deviceTokenStr;
    NSString *brand     =   textbox1.text;
    NSString *model     =   textbox2.text;
    NSString *year      =   textbox3.text;
    NSString *condition =   textbox4.text;
    NSString *box       =   textbox5.text;
    NSString *warranty  =   textbox6.text;
    //NSString *front_img =   _path1;
    //NSString *back_img  =   _path2;
    //NSString *side_img  =   _path3;

    NSString *sendData = @"name=";
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", name]];
    sendData = [sendData stringByAppendingString:@"&lastname="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", lastname]];



    sendData = [sendData stringByAppendingString:@"&tag="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", tag]];
    sendData = [sendData stringByAppendingString:@"&gcmid="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", gcmid]];
    sendData = [sendData stringByAppendingString:@"&brand="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", brand]];
    sendData = [sendData stringByAppendingString:@"&model="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", model]];
    sendData = [sendData stringByAppendingString:@"&condition="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", condition]];
    sendData = [sendData stringByAppendingString:@"&year="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", year]];
    sendData = [sendData stringByAppendingString:@"&box="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", box]];
    sendData = [sendData stringByAppendingString:@"&warranty="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", warranty]];
    /*
    sendData = [sendData stringByAppendingString:@"&front_img="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", front_img]];
    sendData = [sendData stringByAppendingString:@"&back_img="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", back_img]];
    sendData = [sendData stringByAppendingString:@"&side_img="];
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", side_img]];
    */


    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.onlinestoresolution.net/demo/buymywatch/buymywatch/index.php"]];

    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

    //Here you send your data
    [request setHTTPBody:[sendData dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPMethod:@"POST"];
    NSError *error = nil;
    NSURLResponse *response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *stringReply = (NSString *)[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    _SendWatchId = stringReply;

    if (error)
    {
        NSLog(@"Error: %@", stringReply);

    }
    else
    {
        //The response is in data
        NSLog(@"Success: %@", stringReply);
    }


} 
-(iAction)senddatatophp:(id)发送方{
NSLog(“工作插入按钮”);
NSString*did=[[NSUserDefaults standardUserDefaults]objectForKey:@“deviceID”];
NSString*DeviceTokenster=[[[did描述]
StringByReplacingOfString:@“with String:@”]
StringByReplacingOfString:@“和字符串:@]”发生;
//NSLog(@“%@”,DeviceTokenster);
NSData*getimgdata1=UIImageJPEGRepresentation(_frontimg.image,1);
NSLog(@“%@”,getimgdata1);
NSString*name=@“Admin”;
NSString*lastname=@“面板”;
NSString*标记=@“监视列表”;
NSString*gcmid=DeviceTokenster;
NSString*brand=textbox1.text;
NSString*model=textbox2.text;
NSString*year=textbox3.text;
NSString*条件=textbox4.text;
NSString*box=textbox5.text;
NSString*保修=textbox6.text;
//NSString*前\u img=\u路径1;
//NSString*back\u img=\u path2;
//NSString*side_img=_path3;
NSString*sendData=@“name=”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,name]];
sendData=[senddatastringbyappendingstring:@“&lastname=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,lastname]];
sendData=[sendData stringByAppendingString:@“&tag=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,标记]];
sendData=[senddatastringbyappendingstring:@“&gcmid=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,gcmid]];
sendData=[sendData stringByAppendingString:@“&brand=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,brand]];
sendData=[sendData stringByAppendingString:@“&model=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,model]];
sendData=[sendData stringByAppendingString:@“&condition=“]”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,条件]];
sendData=[sendData stringByAppendingString:@“&year=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,year]];
sendData=[sendData stringByAppendingString:@“&box=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,box]];
sendData=[sendData stringByAppendingString:@“&warranty=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,保修]];
/*
sendData=[sendData stringByAppendingString:@“&front_img=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,front_img]];
sendData=[sendData stringByAppendingString:@“&back_img=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,back_img]];
sendData=[sendData stringByAppendingString:@“&side_img=“”;
sendData=[sendData stringByAppendingString:[NSString stringWithFormat:@“%@”,side_img]];
*/
NSMutableURLRequest*请求=[NSMutableUrlRequestRequestWithURL:[NSURL URLWithString:@]http://www.onlinestoresolution.net/demo/buymywatch/buymywatch/index.php"]];
[请求设置值:@“gzip”用于HttpHeaderField:@“接受编码”];
//这是你的数据
[request setHTTPBody:[sendData dataUsingEncoding:NSUTF8StringEncoding];
[请求设置HttpMethod:@“POST”];
n错误*错误=nil;
NSURLResponse*response=nil;
NSData*data=[NSURLConnection sendSynchronousRequest:请求返回应答:&响应错误:&错误];
NSString*stringReply=(NSString*)[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
_SendWatchId=stringReply;
如果(错误)
{
NSLog(@“错误:%@”,stringReply);
}
其他的
{
//答案是数据
NSLog(@“成功:%@”,stringReply);
}
} 

将此代码用于发送图像文件。在服务器上发布文本数据后,请写下此代码

 UIImage *img=self.imgView.image;
NSData *imageData = UIImagePNGRepresentation(img);
NSString *urlString = [NSString stringWithFormat:@"%@upload.php",@"http://localhost:8888/ImageUploadiOS/"];

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"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"test%d.png\"\r\n",self.fileNum] 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];

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

NSLog(@"Image Return String: %@", returnString);
self.fileNum++;
UIAlertView *alertUpload=[[UIAlertView alloc] initWithTitle:@"DemoApp" message:@"Image Uploaded On Server" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertUpload show];
下面是在服务器上扫描图像数据的php代码

    <?php
$uploaddir = 'uploads/';
$file = basename($_FILES['uploadedfile']['name']);
$uploadfile = $uploaddir . $file;

echo "file=".$file; //is empty, but shouldn't

if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $uploadfile)) {
    echo $file;
}
else {
    echo "error";
}
?>
一次处理多个图像的Php代码是

      <?php
$uploaddir = 'uploads/';
$file1 = basename($_FILES['uploadedfile1']['name']);
$uploadfile = $uploaddir . $file1;

echo "file=".$file1; //is empty, but shouldn't

if (move_uploaded_file($_FILES['uploadedfile1']['tmp_name'], $uploadfile))
{
    //echo $file;
    //echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
    echo 'file1 moved';
}
else
{
    echo "error";
}



$file2 = basename($_FILES['uploadedfile2']['name']);
$uploadfile = $uploaddir . $file2;

echo "file=".$file2; //is empty, but shouldn't

if (move_uploaded_file($_FILES['uploadedfile2']['tmp_name'], $uploadfile))
{
    //echo $file;
    //echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
    echo 'file2 moved';
}
else
{
    echo "error";
}

这些都没有任何意义,但如果您希望同时发送字符串数据和图像数据,则需要将数据附加在一起。为此,最简单的方法是使用可变版本的
NSData

NSData *input1;
NSData *input2;
NSMutableData *output;

output = [[NSMutableData alloc] initWithData:input1];
[output appendData:input2];
然后,
input1
是您的字符串数据,
input2
是您的图像数据(反之亦然),您的
output
是您在身体中使用的数据

您可能需要查看的第一件事是异步发送请求,因为您正在处理大量数据

// add image data
NSData *getimgdata1 = UIImageJPEGRepresentation(_frontimg.image, 1);
if (getimgdata1) {
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:getimgdata1];
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}

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

请参阅此

您是否已传递NSData*getimgdata1?在您的请求中,我已传递img字节码服务器响应将被分配到数据中。而不是使用deleage方法接收响应数据。这给了我错误“使用未声明的标识符‘数据’”我已经修改了我的答案,重新检查plsThanks错误是删除只剩下一个错误是filenum。请告诉我filenum是什么类型的值,用于唯一的图像文件名。每次我们将图像从应用程序发布到服务器上。如test1.png、test2.png等。
// add image data
NSData *getimgdata1 = UIImageJPEGRepresentation(_frontimg.image, 1);
if (getimgdata1) {
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:getimgdata1];
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}

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