ios - 将 UIImage 和文本发送到服务器

标签 ios http post nsurlconnection

我有一个简单的问题 - 我目前正在我的应用程序中编写与向服务器发送数据相关的特定部分。

我尝试发送文本,成功了。发送图片,成功。 我现在要做的是在一个 POST 请求中同时发送它们。 我发现我需要使用称为 multipart/form-data 和 boundaries 的东西,但我还没有找到关于它的更多信息。

那么如何在一个简单的 POST 请求中同时发送文本和图像呢?以及如何在上传期间、之后等检查错误?

谢谢!

我写的引用代码,但发送了 0 字节的信息:

NSData *imageData = UIImageJPEGRepresentation(sendImage, 1.0);
    // setting up the request object now
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://posttestserver.com/post.php?dir=something"]];
    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"---------------------------54737809831466490885746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"reportingImage.jpg\"rn" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: application/octet-streamrnrn" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[@"Content-Type: text/xml" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[[alertView textFieldAtIndex:0] text] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    NSLog(returnString);

最佳答案

这是一个发送文本和图像的工作片段,可选的一些文本,每个文本都有几个参数

//After dismissing the alert, we get its text (user location and notes) and the picture he took

     NSMutableData *body = [NSMutableData data];
     NSURL *url = [NSURL URLWithString:@"http://posttestserver.com/post.php?dir=Doda"]; //Test server, you can access it online to see the upload
     NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
     [req setHTTPMethod:@"POST"];
     NSString *boundary = @"---------------------------14737809831466499882746641449"; //I have no idea what this is, but without it the code won't work
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
     [req setValue:contentType forHTTPHeaderField: @"Content-Type"];

     //Attaching image
     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[@"Content-Disposition: attachment; name=\"imageOfReport\"; filename=\"imageOfReport.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[NSData dataWithData:UIImageJPEGRepresentation(sendImage, 1.0)]]; //Crucial, getting a JPEG version of the image and sending it
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"report_description\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[[[alertView textFieldAtIndex:0] text] dataUsingEncoding:NSUTF8StringEncoding]]; //Crucial, taking the text from the Alert and sending it
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
     [req setHTTPBody:body];

     //Below are few lines which can add other parameters and text
     /*        [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"spid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
     [req setHTTPBody:body];*/

    NSURLConnection *sendingTheData2 = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; //Sent! ;)

关于ios - 将 UIImage 和文本发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970500/

相关文章:

iphone - UIImage 动画在没有动画推送的 View 中不起作用

ios - 在 iOS 中呈现或推送 ViewController 之前等待数据加载

api - 如何在 Alphavantage 的 URL 中使用带有 "."的符号?

testing - Postman 中的循环请求(使用 POST 请求)

c# - 使用 SOAP,如何在一个请求中传递多个 ID?

objective-c - timeIntervalSinceReferenceDate 或 timeIntervalSince1970

ios - 将苹果设备注册为开发者设备会对它做什么?

http - 将 Nginx 502/504 错误从 proxy_pass 重新映射为 408 错误

python - 从 Django 获取客户端 Active Directory 用户名

java - 通过长连接实现与POST(HTTP)的推送技术连接