【问题标题】:Upload Multiple Images to Server IOS上传多张图片到服务器IOS
【发布时间】:2015-09-19 15:38:56
【问题描述】:

我想知道如何使用 Objective C 将多个图像上传到服务器。 这是我正在尝试使用的代码 sn-p。

-(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];

}

谢谢

【问题讨论】:

    标签: ios objective-c


    【解决方案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 );
    
    }
    

    希望这对你有帮助..干杯..

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 2018-06-13
      • 2019-03-07
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2023-03-11
      相关资源
      最近更新 更多