ios将具有多个参数的图像上传到服务器

时间:2014-03-16 08:32:10

标签: ios iphone objective-c https http-headers

我正在尝试使用其他一些变量上传图像,但我失败了。请告诉我我在哪里做错了。我在代码的顶部提供了一些变量,例如打印,复印和尺寸等。如果我将这些值发布到没有image参数的服务器它已成功发布但是当我尝试使用它上传图像时它失败了。请看密码并告诉我我在哪里做错了。

`UIImage *img = [UIImage imageNamed:@"java_url.jpg"];
NSData *data = UIImageJPEGRepresentation(img,90);
NSString *md5Hash = [self md5:[NSString stringWithFormat:@"%@",data]];
NSMutableString *postString = [NSMutableString stringWithString:@""];
[postString appendString:[NSString stringWithFormat:@"&%@=%@",@"type", @"8x12" ]];

[postString appendString:[NSString stringWithFormat:@"&%@=%@",@"copies", @"2"]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@",@"sizing", kSizingOptionShrinkToFit]];
[postString appendString:[NSString stringWithFormat:@"&%@=%d",@"priceToUser", 5]];
  [postString appendString:[NSString stringWithFormat:@"&%@=%@", @"md5Hash",md5Hash]];

NSString *urlString = [NSString stringWithFormat:@"https://sandbox.pwinty.com/v2/Orders/%@/Photos",OrderId];
NSString *filename = @"facebook_contest_image.png";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
[request addValue:@"72c56256-95a4-44e8-be31-b7b3a0b094b7" forHTTPHeaderField:@"X-Pwinty-MerchantId"];
[request addValue:@"3a1f6f29-d6e1-4f3f-9891-27e5d4f90009" forHTTPHeaderField:@"X-Pwinty-REST-API-Key"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:data]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@", @"file",postbody]];
NSData *postData = [postString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSLog(@"%@",postData);
[request setHTTPBody:postbody];

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

1 个答案:

答案 0 :(得分:0)

我通常使用AFNetworking其最好的库,以便任何服务器请求尝试此代码, 它需要AFNetworking

- (void)upload {

    // !!! only JPG, PNG not covered! Have to cover PNG as well
    NSString *fileName = [NSString stringWithFormat:@"%ld%c%c.jpg", (long)[[NSDate date] timeIntervalSince1970], arc4random_uniform(26) + 'a', arc4random_uniform(26) + 'a'];
    // NSLog(@"FileName == %@", fileName);

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    NSDictionary *parameters = @{@"lat": @"8.444444",
                                 @"lng": @"50.44444",
                                 @"location": @"New York",
                                 @"type": @"2",
                                 @"claim": @"NYC",
                                 @"flag": @"0"};
     // BASIC AUTH (if you need):
    manager.securityPolicy.allowInvalidCertificates = YES;
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    [manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"foo" password:@"bar"];
    // BASIC AUTH END

    NSString *URLString = @"http://192.168.1.157/tapp/laravel/public/foobar/upload";

    /// !!! only jpg, have to cover png as well
    NSData *imageData = UIImageJPEGRepresentation(self.imageView.image, 0.5); // image size ca. 50 KB
    [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Failure %@, %@", error, operation.responseString);
    }];

    [self dismissViewControllerAnimated:NO completion:nil];
}