objective-c - NSMutableURLRequest:使用setHTTPBodyStream而不是setHTTPBody上传文件

标签 objective-c ios nsmutableurlrequest

我目前正在使用[body appendData: [NSData dataWithData:data]];通过HTTP Post上传文件,其中data是我的文件的NSMutableData表示形式。

// 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上传文件并传递文件在磁盘上的位置-我将如何使用此方法设置其他属性(例如内容处置)?

最佳答案

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

还有其他选择(将NSInputStream子类化,这似乎有点棘手,还有第三方库,例如ASIHTTPRequest)。 This帖子提供了更多信息和链接。

关于objective-c - NSMutableURLRequest:使用setHTTPBodyStream而不是setHTTPBody上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11692275/

相关文章:

ios - HeaderDoc不生成HTML文档

ios - 如何在 iPhone 6/6s 或 iPhone 6+/6s+ 的 iOS 模拟器中打开显示缩放

ios - TableView 上的更新无效

ios - UIBarButtonItem Frame 在旋转动画后变化

ios - 使用 NSMutableURLRequest 将海关对象发布到 Web

ios - NSMutableURLRequest 和 "request body stream exhausted"错误

objective-c - YouTube API v3示例项目引发GTLJSONRPCErrorDomain -32602未经授权的错误

ios - iOS 应用程序的 Facebook 登录在应用程序外部发生

ios - UITableViewCell 滚动时弯曲动画

ios - 如何将此 curl 命令转换为 Objective-C