【问题标题】:Objective C Post Multipart/data Text ErrorObjective C Post 多部分/数据文本错误
【发布时间】:2025-12-18 08:15:02
【问题描述】:

我有个问题http Post request 情况如下:

我必须在此处发送带有文本和 Img 代码的发布请求:

NSMutableURLRequest *eventRequest = [NSMutableURLRequest requestWithURL:_urlRequest cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:500];
 NSString *boundary = @"---------------------------14737809831466499882746641449";

//Set header Http POST
[eventRequest setHTTPMethod:@"POST"];
[eventRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]forHTTPHeaderField:@"Content-Type"];

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


//Image upload
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: immage/jpg \r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; filename=\"immagine.jpg\""dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:data];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

// Close boundary
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// set request body
[eventRequest setHTTPBody:body];

NSString* string = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
NSLog(@"Stampa Dati inviati: %@", string);

// Http header Content-Lenght
[eventRequest setValue:[NSString stringWithFormat:@"%i",[data length]] forHTTPHeaderField:@"Content-Length"];

self.theConnection=[[NSURLConnection alloc] initWithRequest:eventRequest delegate:self];

if (self.theConnection) {
    self.receivedData = [[NSMutableData data] retain];
} else {
    // Inform the user that the connection failed.
    NSLog(@"Connection Problem");
}

可以看到我在正文的第一部分设置了 "Content-Type" 的多部分/表单数据,我设置了 che 文本,在第二部分我设置了图像,但图像上传正确但没有“扩展名”,首先我设置了要发送的文本,但显然未设置文本或格式未读取到服务器。

方法[self postParametre] 返回一个NSMutableString,格式为“key1=value1&key2=value2&key3=value3”。

谁能帮帮我?

问候。

【问题讨论】:

  • 乍一看,似乎没有错误。但是手工制作多部分表单请求很容易出错。您可以通过 NSURLConnection 的 canHandleRequest 检查请求是否有效。尽管该方法无法 100% 确认这一点。另外,请检查和 NSLog 所有你能得到的错误。此外,获取构建的数据,将其转换为字符串并将其打印到控制台(使用零大小的图像)并手动检查边界和那些东西。
  • 我也希望你已经正确地实现了所有的委托方法,是吗? ;)

标签: objective-c upload httprequest


【解决方案1】:

您可以使用https://github.com/AFNetworking/AFNetworking

AFHTTPClient 有一个方法 multipartFormRequestWithMethod。这将上传多部分图片。

【讨论】:

  • 我更喜欢使用 NSMutableURLRequest