2016-09-15 13 views
0

コードexampleをチェックして、マルチパートで画像をアップロードしました。 しかし、どのように@ "file://path/to/image.jpg"という値が得られるのかわかりません。AFNetworking 3.0でギャラリーから画像をアップロード

これは私が試したものです:

-(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#>] 
    } 
} 

答えて

2

-(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"]; 
関連する問題