2015-06-12 82 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

相关问题