2015-06-12 109 views
1

我想知道如何使用目標C將多個圖像上傳到服務器。 下面是我嘗試使用的代碼片段。將多個圖像上傳到服務器IOS

-(void)uploadImage:(NSMutableArray *)image andMessageBO:(MessageBO *)message 
{ 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@PostImageServlet?",kPostImageUploadWebServiceURL]]; 
    NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:url]; 

    [postRequest setHTTPMethod:@"POST"]; 
    [postRequest setTimeoutInterval:60.0]; 
    NSString *stringBoundary = @"0xKhTmLbOuNdArY"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]; 
    [postRequest addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSData *imageData =UIImagePNGRepresentation(image); 


    NSMutableData *postBody = [[NSMutableData alloc] init]; 
    [postBody appendData:[[NSString stringWithFormat:@"isFormField=true"]dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postBody appendData:[[NSString stringWithFormat:@"%@",@"Content-Disposition: form-data; name=\"userid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postBody appendData:[[NSString stringWithFormat:@"%d",messageBO.messageId] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"profilepic\"; filename=\"%d_postImage.png\"\r\n",messageBO.messageId] dataUsingEncoding:NSUTF8StringEncoding]]; 
     for (int i = 0; i < [image count]; i++) 
    { 
     [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"profilepic\"; filename=\"%d_postImage%d.png\"\r\n",messageBO.messageId,i] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[image objectAtIndex:i]]; 
    } 
    [postBody appendData:[[NSString stringWithFormat:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [postBody appendData:[NSData dataWithData:imageData]]; 
    [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postRequest setHTTPBody:postBody]; 

    NSData *returnData = [NSURLConnection sendSynchronousRequest:postRequest returningResponse:nil error:nil]; 
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
    DebugLog(@"IMge:%@",returnString); 

    // [self removeOfflineImage:expenseBO]; 

} 

感謝

回答

1

我個人使用這種方法進行交流和上傳工作人員的服務器,這是的方法一個JSON類型:

- (NSURLRequest *)convertToRequest:(NSString *)stringURL withDictionary:(NSDictionary *)dictionary 
{ 

    NSError *error = nil; 

    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error]; 

    NSURL *url = [NSURL URLWithString:stringURL]; 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody: JSONData]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept-Encoding"]; 

    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[JSONData length]] forHTTPHeaderField:@"Content-Length"]; 


    return request; 
} 

字典參數充滿了類似:

首先將數據轉換爲base64String類似:

NSData *data = UIImageJPEGRepresentation(self.userImageView.image, 1.0); 

NSData *imageBase64Data = [data base64EncodedDataWithOptions:0]; 

NSString *imageBase64String = [[NSString alloc] initWithData:imageBase64Data encoding: NSUTF8StringEncoding]; 

它添加到字典...

NSDictionary *jsonDictionary = @{ 
            @0 : @{ 
            "name": "file1", 
            "image" : imageBase64String1 
            }, 
            @1 : @{ 
            "name": "file2", 
            "image" : imageBase64String2 
            } //and so on.. 
           }; 
//you may want to put that in a loop 

[ImplementationClass convertToRequest:YourServerURL withDictionary: jsonDictionary]; 

,並在服務器端是這樣的:

解碼發送到服務器(PHP)的數據:

// Retrieves data 

$handle = fopen('php://input','r'); 
$jsonInput = fgets($handle); 
$json_decoded = json_decode($jsonInput,true); 

/* 
* I commented this because i'm not sure if this suits my `NSDictionary` above 
* but you can always check by logging `$json_decoded` or probably `var_dump()` function of php 
* 
* $json_decoded[0]['name']; 
* $json_decoded[0]['image']; 
* $json_decoded[1]['name']; 
* $json_decoded[1]['image']; 
*/ 

function upload_image($filename, $uploadedfile) { 

    $save_file_path = getcwd()."/uploads/"; 

    $save_file_path  .= $filename; 

    $image_file   = base64_decode($uploadedfile); 

    //DELETES EXISTING 
    if (file_exists($save_file_path)) { unlink($save_file_path); } 

    //CREATE NEW FILE 
    file_put_contents($save_file_path, $image_file); 

    //CHECK FILE IF EXIST 
    return ((file_exists($save_file_path)) ? true : false); 

} 

希望這是對你有幫助..乾杯..

+0

令人驚歎的代碼。我只是試了一下,它對我很有用 –

+0

@丹,很高興它爲你工作..乾杯! :) – 0yeoj

相關問題