現在、HTTP Post を介してサーバーに画像をアップロードする作業を行っていますが、サービスを呼び出す URL を作成する方法がわかりません。ユーザーはライブラリまたはカメラから画像を選択し、insert ステートメントを実行する json サービスを呼び出します。
サービスは次の uritemplate を想定しています:
@"%@/DataTransfer/SetUserProfileImage?EMP_ID=%@&image=%@&imageName=%@"
画像データが何らかの方法で文字列に変換され、url 経由で送信されることを期待しています。
これは私の現在のコードです:
- (BOOL)setUserProfileImage:(UIImage *)imgUser Name:(NSString *)strName{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSData *dataImage = UIImagePNGRepresentation(imgUser);
NSString* theNSString = [[NSString alloc] initWithData:dataImage encoding:NSASCIIStringEncoding];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/DataTransfer /SetUserProfileImage?EMP_ID=%@&"
"image=%@&imageName=%@",
appDelegate.ServerAddress,
appDelegate.UserId,
theNSString,
strName]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSURLResponse* response = nil;
NSError* resultError = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&resultError];
NSString *strResult = [[NSString alloc] initWithBytes:[data bytes]
length:[data length]
encoding:NSUTF8StringEncoding];
BOOL imgResponse = [strResult boolValue];
[strResult release];
return imgResponse;
}
NSURL が "" であるというエラーが表示されます。正しい URL を作成できないようです。サービス自体がこの文字列を再び画像に変換することを知っています。
アップデート:
- (BOOL)setUserProfileImage:(UIImage *)imgUser Name:(NSString *)strName{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *url = [NSString stringWithFormat:@"%@/DataTransfer/SetUserProfileImage",appDelegate.ServerAddress];
NSData *data = UIImagePNGRepresentation(imgUser);
NSString * boundary = @"tweetPhotoBoundaryParm";
NSMutableData *postData = [NSMutableData dataWithCapacity:[data length] + 1024];
name=\"EMP_ID\"\r\n\r\n%@", @"100-01"];
NSString * boundaryString = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];
NSString * boundaryStringFinal = [NSString stringWithFormat:@"\r\n--%@--\r\n", boundary];
[postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\";\r\nfilename=\"media.png\"\r\nContent-Type: image/png\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:data];
[postData appendData:[boundaryStringFinal dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest * theRequest=(NSMutableURLRequest*)[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[theRequest setHTTPMethod:@"POST"];
[theRequest addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
//[theRequest addValue:@"www.tweetphoto.com" forHTTPHeaderField:@"Host"];
NSString * dataLength = [NSString stringWithFormat:@"%d", [postData length]];
[theRequest addValue:dataLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody:(NSData*)postData];
NSURLConnection * theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if (theConnection)
{
webData =[[NSMutableData data] retain];
}
else
{
NSLog(@"%@",@"Could not connect to the network");
}
return false;
}