2013-02-04 29 views
1

我正在尝试在目标c中编写一个方法/函数来将数据发布到在线php脚本中。一切进展顺利,它成功上传了许多文件,但我不知道如何随这些文件一起发送变量。我已经花了几个小时看着这个网站,我无法找到一个发布文件和变量的例子。目标C发布变量以及文件

NSURL * postURL = [NSURL URLWithString:serverURL]; 
NSString * contentBoundary = @"-14737809831466499882746641449"; 
NSString * contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", contentBoundary]; 

// Build Request 
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:postURL]; 
[urlRequest setHTTPMethod:@"POST"]; 
[urlRequest addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData * postBody = [NSMutableData data]; 

NSMutableString * postString = [NSMutableString stringWithFormat:@""]; 
for(NSString * key in dataArray) [postString appendString:[NSString stringWithFormat:@"%@=%@&", key, [dataArray objectForKey:key]]]; 
[postString deleteCharactersInRange:NSMakeRange([postString length] -1, 1)]; // Trim trailing ampersand from string 
NSData * postData = [postString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; 

[postBody appendData:[NSData dataWithData:postData]]; 

if(attachments != nil){ 
    for(NSString * filePath in attachments){ 
     NSString * fileName = [filePath lastPathComponent]; 
     NSData * attachedFile = [NSData dataWithContentsOfFile:filePath]; 
     [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", contentBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data;name=\"userfile[]\"; filename=\"%@\"\r\n", fileName] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[[NSString stringWithFormat:@"Content-Type:application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[NSData dataWithData:attachedFile]]; 
     [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", contentBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
} 

NSString * postLength = [NSString stringWithFormat:@"%d", [postBody length]]; 
[urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[urlRequest setHTTPBody:postBody]; 

任何帮助,将不胜感激。

回答

2

你可以尝试以下方式附加变量的值来发布数据:

// text parameter 
    [postbody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"applicationId\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSString *parameterValue1=[dict objectForKey:@"applicationId"]; 
    [postbody appendData:[parameterValue1 dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postbody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

希望对你有用。以上代码仅是与文件上传一起发送的参数的一个示例。

+0

我现在检查一下并回复你:) – Adam

+0

当然。我会等着。 :) –

+0

太棒了,非常感谢你。作品美观:) – Adam