【问题标题】:AFNetworking form data uploading issueAFNetworking 表单数据上传问题
【发布时间】:2016-01-04 08:59:10
【问题描述】:

我想使用AFNetworking 发布表单数据。我正在使用这段代码来实现这一点:

    // Create service request url
    NSString *urlString = [NSString stringWithFormat:@"%@%@", kBaseURL, webServiceAPIName];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager.requestSerializer setValue:@"myUser" forHTTPHeaderField:@"X-User-Agent"];
    [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    // Set calling keys
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:@"5341" forKey:@"Id"];
    [dict setObject:@"f1" forKey:@"refDataId"];
    [dict setObject:@"f1" forKey:@"customRefDataId"];
    [dict setObject:@"587" forKey:@"cost"];


    [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:UIImagePNGRepresentation(files[0]) name:@"ImageName" fileName:@"file1" mimeType:@"image/png"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSLog(@"upload successful");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error image upload");
    }];

在等待一段时间后执行此块后,它会进入失败部分。日志记录:"Error image upload"。没有给出任何错误。

我在POSTMAN API CLIENT 中尝试了我的 API,它工作正常。我能够发送数据并获得回复。

运行此块后,我无法运行任何其他 API 调用,我必须停止我的应用并再次运行才能运行任何其他 API 调用。

这段代码有什么问题,为什么我无法上传任何表单数据以及为什么它会阻止我的任何其他 API 调用

【问题讨论】:

  • 您使用的是最新版本的框架吗? NSError *error 在故障块中绝对为零吗?在您的appendPartWithFileData: 调用中,出于测试目的,我将取出那行代码并检查NSData 对象是否也不为零。
  • @Luke 这是我在 NSError *error 中遇到的错误
  • Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x7fde1ae09790 {NSUnderlyingError=0x7fde1af158d0 "The request timed out.", NSErrorFailingURLStringKey=apikey, NSErrorFailingURLKey=apikey, NSLocalizedDescription=The request timed out.}
  • 这是在模拟器中吗?如果是这样,这里可能存在重复问题:stackoverflow.com/questions/26972822/… 另外,请检查您当前是否没有在您的 Mac 上运行 Network Link Conditioner 应用程序 - 如果您不知道这是什么,请不要担心;)

标签: ios objective-c xcode api afnetworking


【解决方案1】:

试试下面的代码:

-(void) uploadImage {

NSString *imagePath = [[NSUserDefaults standardUserDefaults] objectForKey:@"userimage"];
NSString * urlString = [stagingURL stringByReplacingOccurrencesOfString:@"user/" withString:@""];
NSString * uploadURL = @"Your URL where image to be uploaded";
NSLog(@"uploadImageURL: %@", uploadURL);
NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]], 0.5);

NSString *queryStringss = [NSString stringWithFormat:@"%@",uploadURL];
queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer=[AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

[manager POST:queryStringss parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
     [formData appendPartWithFileData:imageData name:@"file" fileName:@"file" mimeType:@"image/jpeg"];
 }
      success:^(AFHTTPRequestOperation *operation, id responseObject) {

     NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
     [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
 }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
     NSLog(@"Error: %@ ***** %@", operation.responseString, error);
 }];}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2020-04-05
    • 2011-01-21
    • 2015-01-02
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多