2012-07-18 29 views
0

我想將UIImage上傳到服務器。爲此,我現在用的是以下行的代碼::將文件上傳到服務器 - Objective C/Xcode/Mediawiki

- (void)imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingImage:(UIImage *)image 
       editingInfo:(NSDictionary *)editingInfo 
{ 


imageView.image = image;  

NSData *pngData = UIImagePNGRepresentation(imageView.image); 

NSString *imageFile = @"image.png"; 
NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSString *filePath = [docDir stringByAppendingPathComponent:imageFile]; 
NSString *dataIS=[NSString base64StringFromData:pngData length:[pngData length]]; 
[pngData writeToFile:filePath atomically:YES]; 






NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[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:@"Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:pngData]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
// setting the body of the post to the reqeust 
[request setHTTPBody:body]; 


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 


[self.parentViewController dismissModalViewControllerAnimated:YES]; 

} 

但是,我得到在gdb下面的錯誤::

Your request could not be processed. Request could not be handled

我也對urlString的正確使用感到困惑,即我對我正確使用它有疑問。

如果我不過使用以下urlString,我能到我的圖片文件上傳到服務器::

NSString *urlString = [NSString stringWithFormat:@"http://xxxx.com/mediawiki/api.php?action=upload&filename=image.png&url=%@&token=%@", url, token] ; 

參照APImediawiki(http://www.mediawiki.org/ wiki/API:上傳),有人可以幫我解決嗎?感謝致敬。

+0

的可能重複[如何發送POST數據和圖像文件到服務器的Xcode(http://stackoverflow.com/questions/11261928/how-to-send-post-data-and-image-file -to-server-xcode) – Pfitz 2013-01-06 10:47:02

回答

0

如果你想發送圖像到服務器,通過編碼形式的數據發送,服務器可以處理編碼形式的圖像,他們將獲得編碼的圖像數據。

+0

ok ..但是,那麼urlString應該是什麼?我從存儲在「Documents」文件夾中的'image.png'文件中選取我的照片。我懷疑我是否正確使用它。 – kamalbhai 2012-07-18 09:11:49

+0

你在說什麼樣的編碼形式?你可以請更具體一點?謝謝。我也對這種編碼感到困惑。 – kamalbhai 2012-07-18 09:18:53

1

我有同樣的問題。我用ASIHTTPRequest,上傳文件,它工作正常。

上傳:

鏡像文件:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request addPostValue:@"Ben" forKey:@"names"]; 
[request addPostValue:@"George" forKey:@"names"]; 
[request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"]; 
[request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@"photos"]; 

隨着同時其他數據:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

// Upload a file on disk 
[request setFile:@"/Users/ben/Desktop/ben.jpg" withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" 
forKey:@"photo"]; 

// Upload an NSData instance 
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"]; 

用於下載到期望的路徑:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"]; 
2

我有同樣的問題上傳多個圖像和數據,但我使用AFNetworking類和上傳多個圖像到服務器。

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"your URL"]]; 


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
path = [[NSString alloc] initWithString:[URL absoluteString]]; 
vdict = @{ 
      // Your Parameter Pass 
     }; 

[self checkmultiple:vdict]; 


-(void)checkmultiple:(NSDictionary*)vdict 
{ 

AFHTTPRequestOperation *op = [manager POST:path parameters:vdict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
           { 
            for(i = 0;i<[appDelegate.gblarrydata count];i++) 
            { 
             NSString *paths = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"New Folder"]; 
             // NSLog(@"%@",paths); 
             NSString *documentsDirectory = paths; 

             NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:[[appDelegate.gblarrydata objectAtIndex:i]valueForKey:@"nameimage"]]; 

             NSData *data1 =[[NSData alloc]initWithContentsOfFile:getImagePath]; 
             NSString *data2 =[[appDelegate.gblarrydata objectAtIndex:i] valueForKey:@"Note"]; 

             [formData appendPartWithFileData:data1 name:[NSString stringWithFormat:@"pimage%d",i+1] fileName:[NSString stringWithFormat:@"pimage%d.jpg",i+1] mimeType:@"image/jpeg"]; 

             if(![data2 isEqualToString:@""]) 
             { 
              [formData appendPartWithFormData:[data2 dataUsingEncoding:NSUTF8StringEncoding] 
                     name:[NSString stringWithFormat:@"pnotes%d",i+1]]; 
             } 


            } 


           } 
          success:^(AFHTTPRequestOperation *operation, id responseObject) 
           { 
            NSLog(@"Upload success"); 

            NSString *returnString = [NSString stringWithFormat:@"%@",[responseObject JSONRepresentation]]; 
            NSLog(@"Reg Date:%@",returnString); 

           } 

          failure:^(AFHTTPRequestOperation *operation, NSError *error) 
           { 
            NSLog(@"Error:%@",error); 
           }]; 
[op start]; 

} 
0

// UIImage * img = [UIImage imageNamed:@「min.png」];

// NSData * imageData = UIImageJPEGRepresentation(img,0.2);

NSString *strUrl =[NSString stringWithFormat:@"%@/upload_file.php", [globalApp sharedUser].vg_dominio ]; 
//strUrl = @"http://192.168.1.100/mismedicinas/upload_file.php"; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]]; 
request.HTTPMethod = @"POST"; 
request.timeoutInterval = 60; 
request.HTTPShouldHandleCookies = false; 

//[request setHTTPMethod:@"POST"]; 


NSString *boundary = @"----------SwIfTeRhTtPrEqUeStBoUnDaRy"; 

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 

[request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 
//[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 



NSMutableData *body = [NSMutableData data]; 
NSMutableData *tempData = [NSMutableData data]; 

[tempData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[tempData appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"iphoneimage.xml\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[tempData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

//[tempData appendData:[NSData dataWithData:imageData]]; ///IMAGEN 
[tempData appendData:[NSData dataWithData:cData]]; 

[tempData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData: tempData]; 


[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 



[request setValue: [NSString stringWithFormat:@"%d", body.length ] forHTTPHeaderField:@"Content-Length"]; 


request.HTTPBody =body; 





NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

NSLog(@"finalizacion %@", returnString);