ios将带有多个参数的图像上载到服务器

ios将带有多个参数的图像上载到服务器,ios,iphone,objective-c,https,http-headers,Ios,Iphone,Objective C,Https,Http Headers,我试图上传一个带有其他变量的图像,但失败了。请告诉我我哪里做错了。我在代码顶部提供了一些变量,例如类型、副本和大小等。如果我在没有image参数的情况下将这些值发布到服务器,它会成功发布,但当我尝试上载带有该参数的图像时,它会失败。请注意代码,告诉我哪里做错了 `UIImage *img = [UIImage imageNamed:@"java_url.jpg"]; NSData *data = UIImageJPEGRepresentation(img,90); NSString *md5Ha

我试图上传一个带有其他变量的图像,但失败了。请告诉我我哪里做错了。我在代码顶部提供了一些变量,例如类型、副本和大小等。如果我在没有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);`

对于任何服务器请求,我通常使用它最好的库尝试下面的代码, 它需要网络

- (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];
}
-(作废)上传{
//!!!仅JPG,PNG未涵盖!必须涵盖PNG
NSString*文件名=[NSString stringWithFormat:@“%ld%c%c.jpg”,(长)[[NSDate date]时间间隔1970],arc4random_uniform(26)+“a”,arc4random_uniform(26)+“a”);
//NSLog(@“FileName==%@”,FileName);
AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];
NSDictionary*参数=@{@“lat”:@“8.4444”,
@“液化天然气”:“50.44444”,
@“地点”:“纽约”,
@“类型”:@“2”,
@“索赔”:@“纽约市”,
@“标志”:@“0”};
//基本身份验证(如果需要):
manager.securityPolicy.allowInvalidCertificates=是;
manager.requestSerializer=[AFHTTPRequestSerializer序列化程序];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@“foo”密码:@“bar”];
//基本身份验证结束
NSString*URLString=@”http://192.168.1.157/tapp/laravel/public/foobar/upload";
///!!!只有jpg,也必须涵盖png
NSData*imageData=UIImageJPEG表示(self.imageView.image,0.5);//图像大小约为50 KB
[manager POST:URLString参数:参数constructingBodyWithBlock:^(id formData){
[formData appendPartWithFileData:imageData名称:@“文件”文件名:文件名mimeType:@“图像/jpeg”];
}成功:^(AFHTTPRequestOperation*操作,id响应对象){
NSLog(@“成功%@”,响应对象);
}失败:^(AFHTTPRequestOperation*操作,NSError*错误){
NSLog(@“故障%@,%@”,错误,操作。响应字符串);
}];
[自我解除视图控制器激活:未完成:无];
}

您必须同时上传图像和其他参数吗?是的,在同一时间提交一个post请求,我做了完全相同的操作,但未成功。如果我在没有映像的情况下发布数据,则成功发布其余变量,但在上载映像时,它会生成以下错误:错误域=AFNetworkingErrorDomain代码=-1011“请求失败:内部服务器错误(500)”用户信息=0x8e5de00{NSErrorFailingURLKey=,AFNetworkingOperationFailingURLResponseErrorKey=NSLocalizedDescription=请求失败:内部服务器错误(500)},{“错误消息”:“未知服务器错误”}