2012-05-11 4 views
1

에서 가능한 중복 오는 :
Get Variable from httpcontext coming from NSUrlRequest으로 HttpContext에서 변수를 가져가 NSUrlRequest

이 문제는 아이폰과 asp.net 서버 간의 HTTP 연결 "POST"에 대한 좋은 입문서가 될 것입니다 :) 내가 뭘 하려는지 아이폰에서 Asp.net 서버로 이미지를 보내는 것입니다; 다음은 목표 - C에서 내 uploadImage의 fonction : 내 문제는이에서 오는

public class SaveData : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/plain"; 
     bool hasErrors = false; 
     HttpFileCollection filesPosted = context.Request.Files; 
     String filePath = context.Request.QueryString["filepath"]; 
     String fileName = context.Request.QueryString["filename"]; 
     try 
     { 
      if (String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(filePath) || filesPosted.Count <= 0) 
       hasErrors = true; 

      if (!hasErrors) 
      { 
       HttpContext.Current.Response.Write(WriteFile(filesPosted[0], filePath, fileName)); 
      } 
      else 
      { 
       context.Response.Write("Failed: parsing error"); 
      } 
     } 
     catch (Exception ex) 
     { 
      context.Response.Write("Failed: exception error:::" + ex.Message); 
     } 

    } 

    private string WriteFile(HttpPostedFile file, String filePath, String fileName) 
    { 
     System.IO.Directory.CreateDirectory(filePath); 
     int counter = 0; 
     string path = String.Format("{0}\\{1}.jpg", filePath, fileName); 
     while (System.IO.File.Exists(path)) 
     { 
      counter++; 
      path = String.Format("{0}\\{1}-{2}.jpg", filePath, fileName, counter); 
     } 

     file.SaveAs(path); 
     return path; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

: 여기

- (IBAction)uploadImage { 
/* 
turning the image into a NSData object 
getting the image back out of the UIImageView 
setting the quality to 90 
*/ 
NSData *imageData = UIImageJPEGRepresentation(image.image, 33); 
// setting up the URL to post to 
NSString *urlString = @"MyWebServiceUrl"; 

// setting up the request object now 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

/* 
add some header info now 
we always need a boundary when we post a file 
also we need to set the content type 

You might want to generate a random boundary.. this is just the same 
as my output from wireshark on a valid html post 
*/ 
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

/* 
now lets create the body of the post 
*/ 
NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];  
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; filepath=\"ProfilePic\"; filename=\"ipodfile\"\r\n"] 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]]; 
// setting the body of the post to the reqeust 
[request setHTTPBody:body]; 

// now lets make the connection to the web 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

NSLog(@"%@", returnString); 

}

그리고는 전송 된 데이터를 구문 분석하고 파일을 저장 내 웹 서비스의 Fonctions입니다 두 줄

 String filePath = context.Request.QueryString["filepath"]; 
     String fileName = context.Request.QueryString["filename"]; 

context.Request.QueryString 내 hasErrors가 false가되도록 null을 반환합니다. 모든 아이디어를 해결하는 방법에 대해 감사 드리며, 모두에게 감사드립니다.

여기
+0

어떻게 수행하나요? –

+1

프로필로 이동하여 답변 중 하나를 클릭하고 정답의 왼쪽에있는 체크 박스를 클릭하십시오. –

+0

이제 문제가 해결되었습니다. 답을 알고 계시면 도움주세요. –

답변

0

노력의 하루 후 솔루션 :

클라이언트 코드 :

// post body 
NSMutableData *body = [NSMutableData data]; 

// add params (all params are strings) 
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", @"filename"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"%@\r\n", imageName] dataUsingEncoding:NSUTF8StringEncoding]]; 


// add image data 
if (imageData) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"myImage\"; filename=\"image.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:imageData]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

Asp.net 서버 코드 :

String filePath = context.Request.Form["filename"]; 

이 질문 (튜토리얼)처럼 희망)