2013-03-14 14 views
22

iOS uygulamamda, çok kanallı dosya için NSMutableURLRequest'u kullanarak java API ile dosya yüklemek istiyorum. Burada parametre gösteren form. iPhone, AFNetworking kullanarak multipart dosyasını yükleme

<form action="API_URL" encType='multipart/form-data' method=post> 
      <input type=file name="files"> 
      <input type=submit value="Upload Attempt Files"> 

DÜZENLEME form2

 <form action='URL' method="post" encType='multipart/form-data'> 
<input name="key1" value='123'> 
<input name="key2" value='asdf'> 
<input name="key3" value='qwerty'> 
<input name="key4" value='aaa'> 
<input name="key5" value='aaa'> 
<input name="key6" value='false'> 
<input type="file" name="files"> 
<input type=submit value="Create Forum Posts"> 
    </form>   

Bunu başarmak nasıl.

buradaki Question, iOS'ta AFNetworking'u kullanarak çoklu nesne dosyasının nasıl yükleneceğini gösterir (nesnel c). Ama ben kullanıyorum formuna göre parametre koymak nasıl alamadım.

yardımcı ve HTML'inize baktığımızda

+1

Doğru için bu yükleme yapmak istiyorum varsayalım musunuz AFNetworking üzerinden Objective-C? ("Java API" referansı kafa karıştırıcıdır, ancak şimdi sadece Java üzerinde sunucu üzerinde bir Java çalıştırdığınızı farzediyorum. Bu doğru mu?) – Rob

+0

objektif c'den javada sunucuya yazılan API'yi aradım – ios

+0

Ok . IOS uygulaması, sunucunun perde arkasında kullandığı teknolojiyi umursamıyor, çünkü HTTP üzerinden iletişim kuruyor ve burada gerçekten önemsediğimiz tek şey bu. Sorunuzdaki "java" etiketi ve referanslar, okuyucuları yanlış yola yönlendirebilir. Bu referansları kaldırmak isteyebilirsiniz ... – Rob

cevap

77

öner Lütfen sizin <input type=file> ait namefiles olduğunu ve bu nedenle, sen appendPartWithFileData yöntemine name parametre olarak @"files" kullanacaktır. Örneğin, AFNetworking 3.x ile:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:imageData 
           name:@"files" 
          fileName:photoName mimeType:@"image/jpeg"]; 

    [formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding] 
           name:@"key1"]; 

    [formData appendPartWithFormData:[key2 dataUsingEncoding:NSUTF8StringEncoding] 
           name:@"key2"]; 

    // etc. 
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) { 
    NSLog(@"Response: %@", responseObject); 
} failure:^(NSURLSessionDataTask *task, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

(1.x ve 2.x sözdizimi AFNetworking için, bu cevabın düzeltme geçmişini görüyoruz.)

+0

Yardım için teşekkürler .... burada kimlik doğrulaması için çerez verileri göndermek için .. Bir şey daha ne ben istek göndermek ben sunucuda görünür değil ne yanlış olabilir ... – ios

+0

@ios Emin değilim çerezleri, ama belki [Bu cevap] (http://stackoverflow.com/questions/10984374/how-to-manage-sessions-with-afnetworking) yardımcı olur. Neden işe yaramazsa, söyleyemem, çünkü sunucumda test ettim ve dosya iyi görünüyordu. Ancak, kimlik doğrulama için verileri çerezlere eklemeniz gerekiyorsa ve bunu yapmadıysanız, çalışmasını bekler misiniz? Yine de, sorunuzu düzenleyebilir, yükleme kodunuzun son yorumunu ekleyebilirsin. – Rob

+0

burada başka bir formum var: form 2'de gösterildiği gibi. Bununla nasıl çalışacaksınız? Lütfen – ios

3
-(void) makePhotoUploadRequest{ 

    NSArray *keys = [[NSArray alloc]initWithObjects:@"UserID", @"CompanyName" ,@"Location",@"Latitude",@"Longitude",@"Tagline",@"Goals",@"ColorName",nil]; 
    NSArray *values =[[NSArray alloc]initWithObjects:@"103",@"queppelin",@"Jaiur",@"11.3" ,@"12.3",@"Let's do it",@"Let's do it",@"Let's do it", nil]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    NSURL *baseUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/%@/RegisterCompanyUser",serverRequest,serverPort,serverName]]; 

    NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); 
    [request setURL:baseUrl]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"0xKhTmLbOuNdArY"; 
    NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; 

    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *tempPostData = [NSMutableData data]; 
    [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


      for(int i=0;i<keys.count;i++){ 
       NSString *str = values[i]; 
       NSString *key =keys[i]; 
       NSLog(@"Key Value pair: %@-%@",key,str); 
       [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [tempPostData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; 
       // [tempPostData appendData:[@"\r\n--%@\r\n",boundary dataUsingEncoding:NSUTF8StringEncoding]]; 
        [tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]]; 

     } 





    // Sample file to send as data 
    [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Image\"; filename=\"%@\"\r\n", @"company-logo.png"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

    UIImage *myImageObj = [UIImage imageNamed:@"company-logo.png"]; 
    NSData *mydata= UIImagePNGRepresentation(myImageObj); 
    NSLog(@"Image data:%d",mydata.length); 
     [tempPostData appendData:mydata]; 

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

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if(theConnection) 
    { 
     dataWebService = [NSMutableData data] ; 
     NSLog(@"request uploading successful"); 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 


} 
İlgili konular