利用UIImage的NSData上传多表单到指定服务器 NSMutableURLRequest
?
再上传图片的过程中,我用了3天时间终于把这个问题给解决了。主要是细节上总是出错。像我标示加粗的地方都是很容易出错的地方。要仔细看清楚了!少一个字符都不行!
接口类的 boundry定义
static? NSString *? const BOUNDRY=@"0xKhTmLbOuNdArY";
boundry=BOUNDRY
发送实体类:
?
@implementation SendBinaryImage
//傳送圖片二進制流?
+(BOOL)sendImage:(NSData *)data1 boundry:(NSString *)boundry{
NSURL? *urlstring=@"http://192.168.10.88/test/test.php";//
NSString? *contentType=[NSString? stringWithFormat:@"multipart/form-data;boundary=%@",boundry];
? ? NSMutableURLRequest? *request=[[[NSMutableURLRequest alloc] init] autorelease];
? ? [request? setURL: [NSURL URLWithString:urlstring]];
[request? setHTTPMethod:@"POST"];
[request? addValue:contentType forHTTPHeaderField:@"Content-Type"];
NSMutableData? *body=[NSMutableData? data];
NSMutableString *str=[[NSMutableString alloc] init];
[str appendFormat:@"\r\n\r\n--%@\r\n",boundry];
[str appendFormat:@"Content-Disposition:form-data; name="username"\r\n\r\n"];
[str appendFormat:@"username"];
[str appendFormat:@"\r\n\r\n--%@\r\n",boundry];
[str appendFormat:@"Content-Disposition:form-data; name="passwd"\r\n\r\n"];
[str appendFormat:@"password"];
[body appendData:[str? dataUsingEncoding:NSUTF8StringEncoding]];//application/octet-stream
[body appendData:[[NSString? stringWithFormat:@"\r\n--%@\r\n",boundry] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name="filedata"; filename="ttt.jpg"\r\nContent-Type:application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];?
[body appendData:[NSData? dataWithData:data1]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundry] dataUsingEncoding:NSUTF8StringEncoding]];
[str? release];
?
[request setHTTPBody:body];?
NSURLResponse? *response;
NSError *err;
NSData *returnData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *returnString=[[NSStringalloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(returnString);
NSString*content=@"1";
?
? ? BOOL logined = [content intValue] == 1;
return logined;
}
+(NSString*)getBoundry{
return BOUNDRY;
}
@end