2012-07-27 244 views
1

我目前正在上传文件通过HTTP Post,使用[body appendData: [NSData dataWithData:data]];其中数据是我的文件的NSMutableData表示。NSMutableURLRequest:上传文件使用setHTTPBodyStream而不是setHTTPBody

// Set content type to be form data 
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

// Set content type to be form data 
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

// Set up web request with HTTP post headers for 1 form field which is the image 
NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\".jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding: NSUTF8StringEncoding]]; 
[body appendData: [NSData dataWithData:data]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding: NSUTF8StringEncoding]]; 

// Set the body 
[request setHTTPBody: body]; 

由于内存限制,我已阅读,最好使用setHTTPBodyStream并通过在磁盘上的文件的位置上传 - 如使用这种方法的内容处置我将如何去设置其他属性?

回答

3

您必须准备一个包含整个HTML请求主体的文件,包括多部分边界,内容类型和处置,并将其用于setHTTPBodyStream

有替代品(NSInputStream,这似乎有点棘手,和第三方库,如ASIHTTPRequest)。 This提供更多信息和链接。

相关问题