この質問も以前に尋ねられたことは知っていますが、私の問題は少し異なります。
PHPサーバーに画像をアップロードし、iOSから画像とともにさらにパラメーターを送信したい。グーグルで検索して、2つの解決策を見つけた。
JSON
のBase64
エンコードされた文字列として画像を送信するか、どちらかです。参照 リンク 。
または、フォームデータを使用してサーバーに画像をアップロードします。私はこれを参照しました link 。誰かが私をこのように呼んでくれたら、このAPIにパラメーターを追加するのを手伝ってください。
私の質問は、サーバーに画像をアップロードする最良の方法であり、同じWebサービス呼び出しでより多くのパラメーター(ユーザー名、パスワード、および詳細)を送信する必要があることです。
前もって感謝します。
次の2つの方法で、iOSアプリからPHP server
に画像をアップロードできます。
#import "AFHTTPRequestOperation.h"
#import "AFHTTPRequestOperationManager.h"
NSString *stringUrl =@"http://www.myserverurl.com/file/uloaddetails.php?"
NSString *string =@"http://myimageurkstrn.com/img/myimage.png"
NSURL *filePath = [NSURL fileURLWithPath:string];
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:userid,@"id",String_FullName,@"fname",String_Email,@"emailid",String_City,@"city",String_Country,@"country",String_City,@"state",String_TextView,@"bio", nil];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:stringUrl parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
[formData appendPartWithFileURL:filePath name:@"userfile" error:nil];//here userfile is a paramiter for your image
}
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"%@",[responseObject valueForKey:@"Root"]);
Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:string delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[Alert_Success_fail show];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:[error localizedDescription] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[Alert_Success_fail show];
}];
2番目に使用するNSURLConnection:
-(void)uploadImage
{
NSData *imageData = UIImagePNGRepresentation(yourImage);
NSString *urlString = [ NSString stringWithFormat:@"http://yourUploadImageURl.php?intid=%@",1];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", 1]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
}
アプリからphpサーバーに画像をアップロードするためのこの両方の方法は、これがあなたに役立つことを願っています。
これを試してみてください、これは私の仕事です。
NSData *postData = [Imagedata dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:apiString]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
NSError *jsonError;
NSData *objectData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *responseDictft = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&jsonError];
これを試して。
-(void)EchoesPagePhotosUpload
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[self startIndicator];
});
//NSLog(@"%@",uploadPhotosArray);
NSMutableArray *uploadPhotosByteArray=[[NSMutableArray alloc] init];
conversionImage= [UIImage imageWithContentsOfFile:[uploadPhotosArray objectAtIndex:0]];
NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
NSLog(@"conversionImage.size.width %f",conversionImage.size.width);
if(conversionImage.size.height>=250&&conversionImage.size.width>=250)
{
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self performSelectorInBackground: @selector(LoadForLoop) withObject: nil]; NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
NSLog(@"conversionImage.size.width %f",conversionImage.size.width);
for(int img_pos=0;img_pos<[uploadPhotosArray count];img_pos++)
{
conversionImage= [UIImage imageWithContentsOfFile:[uploadPhotosArray objectAtIndex:img_pos]];
NSData *imageData = UIImageJPEGRepresentation(conversionImage,1.0);
[Base64 initialize];
NSString *uploadPhotoEncodedString = [Base64 encode:imageData];
//NSLog(@"Byte Array %d : %@",img_pos,uploadPhotoEncodedString);
[uploadPhotosByteArray addObject:uploadPhotoEncodedString];
}
dispatch_async(dispatch_get_main_queue(), ^{
NSString *photo_description=[webview stringByEvaluatingJavaScriptFromString: @"document.getElementById('UploadPicsDesc').value"];
NSString *uploadPhotoImageName=@"uploadPhoto.jpg";
NSDictionary *UploadpicsJsonResponseDic=[WebserviceViewcontroller EchoesUploadPhotos:profileUserId imageName:uploadPhotoImageName Image:uploadPhotosByteArray PhotoDescription:photo_description];
//NSLog(@"%@",UploadpicsJsonResponseDic);
NSString *UploadPhotosStatusString=[UploadpicsJsonResponseDic valueForKey:@"Status"];
NSLog(@"UploadPhotosStatusString :%@",UploadPhotosStatusString);
NSString *uploadPhotosCallbackstring=[NSString stringWithFormat:@"RefreshForm()"];
[webview stringByEvaluatingJavaScriptFromString:uploadPhotosCallbackstring];
});
});
}
else {
UIAlertView *ErrorAlert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Please Upload Photo Above 250x250 size" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[ErrorAlert show];
NSLog(@"conversionImage.size.height %f",conversionImage.size.height);
NSLog(@"conversionImage.size.width %f",conversionImage.size.width);
}
}
AFNetworking を使用すると、次のようになります。
NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
[params setObject:@"myUserName" forKey:@"username"];
[params setObject:@"1234" forKey:@"password"];
[[AFHTTPRequestOperationLogger sharedLogger] startLogging];
NSData *imageData;
NSString *urlStr = [NSString stringWithFormat:@"http://www.url.com"];
NSURL *url = [NSURL URLWithString:urlStr];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
imageData = UIImageJPEGRepresentation(mediaFile, 0.5);
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:nil parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData)
{
[formData appendPartWithFileData:imageData name:@"mediaFile" fileName:@"picture.png" mimeType:@"image/png"];
}];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"File was uploaded" message:@""
delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil];
[alert show];
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"request: %@",request);
NSLog(@"Failed: %@",[error localizedDescription]);
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite)
{
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[httpClient enqueueHTTPRequestOperation:operation];
-(void)uploadImage
{
NSString *mimetype = @"image/jpeg";
NSString *myimgname = _txt_fname.text; //@"img"; //upload image with this name in server PHP FILE MANAGER
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *imageDataa = UIImagePNGRepresentation(chooseImg.image);
NSDictionary *parameters =@{@"fileimg":defaults }; //@{@"uid": [uidstr valueForKey:@"id"]};
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
//here post url and imagedataa is data conversion of image and fileimg is the upload image with that name in the php code
NSMutableURLRequest *request =
[serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://posturl/newimageupload.php"
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageDataa
name:@"fileimg"
fileName:myimgname
mimeType:mimetype];
}];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);
[uploadImgBtn setTitle:@"Uploaded" forState:UIControlStateNormal];
[chooseImg setImage:[UIImage imageNamed:@"invoice-icon.png"]];
if([[responseObject objectForKey:@"status"] rangeOfString:@"Success"].location != NSNotFound)
{
[self alertMsg:@"Alert" :@"Upload sucess"];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@", error.description);
[chooseImg setImage:[UIImage imageNamed:@"invoice-icon.png"]];
uploadImgBtn.enabled = YES;
}];
// 4. Set the progress block of the operation.
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
float myprog = (float)totalBytesWritten/totalBytesExpectedToWrite*100;
NSLog(@"Wrote %f ", myprog);
}];
// 5. Begin!
[operation start];
}