【问题标题】:Uploading image from gallery with AFNetworking 3.0使用 AFNetworking 3.0 从图库上传图片
【发布时间】:2023-04-06 17:50:01
【问题描述】:

我检查了代码example 以通过分段上传图像。 但我不知道如何获取@"file://path/to/image.jpg" 值。

这是我尝试过的:

-(void) uploadAvatar:(NSString*)file
success:(void (^)())success failure:(void (^)())failure {


    NSString* url = [NSString stringWithFormat:@"%@%@%@", res, kApiRest, kApiServiceAvatar];
    //NSString* filepath = [NSString stringWithFormat:@"%@%@", res, kApiRest];



    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:file] name:@"file" fileName:@"image.jpg" mimeType:@"image/*" error:nil];
    } error:nil];

    //AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSURLSessionUploadTask *uploadTask;
    uploadTask = [self.manager
                  uploadTaskWithStreamedRequest:request
                  progress:^(NSProgress * _Nonnull uploadProgress) {
                      // This is not called back on the main queue.
                      // You are responsible for dispatching to the main queue for UI updates
                      dispatch_async(dispatch_get_main_queue(), ^{
                          //Update the progress view
//                          [progressView setProgress:uploadProgress.fractionCompleted];
                      });
                  }
                  completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                      if (error) {
                          NSLog(@"Error: %@", error);
                          failure();

                      } else {
                          NSLog(@"%@ %@", response, responseObject);
                          success();
                      }
                  }];

    [uploadTask resume];
}


#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self dismissViewControllerAnimated:YES completion:nil];

    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *imageToUse;

    // Imagen
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
        imageToUse = (UIImage *) [info objectForKey: UIImagePickerControllerEditedImage];
        imageToUse = [imageToUse scaleToMaxWidth:kAvatarSize];


        NSData* fileHD = UIImagePNGRepresentation(imageToUse);
        APIAvatar* api = [[APIAvatar alloc] initWithUser:_user.jid password:_user.pass];
        //I have the NSData object fileHD, how can I get the path?
        [api uploadAvatar:[fileHD ] success:<#^(void)success#> failure:<#^(void)failure#>]
    } 
}

【问题讨论】:

    标签: ios afnetworking-3


    【解决方案1】:

    试试这个解决方案

    -(void) uploadAvatar:(NSData*)fileData
    success:(void (^)())success failure:(void (^)())failure {
    
    
        NSString* url = [NSString stringWithFormat:@"%@%@%@", res, kApiRest, kApiServiceAvatar];
        //NSString* filepath = [NSString stringWithFormat:@"%@%@", res, kApiRest];
    
    
    
        NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileData: fileData
                                    name:@"file"
                                fileName:@"image.jpg" mimeType:@"image/*"];
        } error:nil];
    
        //AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    
        NSURLSessionUploadTask *uploadTask;
        uploadTask = [self.manager
                      uploadTaskWithStreamedRequest:request
                      progress:^(NSProgress * _Nonnull uploadProgress) {
                          // This is not called back on the main queue.
                          // You are responsible for dispatching to the main queue for UI updates
                          dispatch_async(dispatch_get_main_queue(), ^{
                              //Update the progress view
    //                          [progressView setProgress:uploadProgress.fractionCompleted];
                          });
                      }
                      completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                          if (error) {
                              NSLog(@"Error: %@", error);
                              failure();
    
                          } else {
                              NSLog(@"%@ %@", response, responseObject);
                              success();
                          }
                      }];
    
        [uploadTask resume];
    }
    
    
    #pragma mark - UIImagePickerControllerDelegate
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        [self dismissViewControllerAnimated:YES completion:nil];
    
        NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
        UIImage *imageToUse;
    
        // Imagen
        if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
            imageToUse = (UIImage *) [info objectForKey: UIImagePickerControllerEditedImage];
            imageToUse = [imageToUse scaleToMaxWidth:kAvatarSize];
    
    
            NSData* fileHD = UIImagePNGRepresentation(imageToUse);
            APIAvatar* api = [[APIAvatar alloc] initWithUser:_user.jid password:_user.pass];
            //I have the NSData object fileHD, how can I get the path?
            [api uploadAvatar: fileHD success:<#^(void)success#> failure:<#^(void)failure#>]
        } 
    }
    

    更新

    如果你想设置标题,经理的标题会被忽略。 相反,它们应该设置在请求对象上。

    [request setValue:@"myheader1" forHTTPHeaderField:@"key1"];
    [request setValue:@"myheader2" forHTTPHeaderField:@"key2"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多