【问题标题】:Uploading image with AFNetworking with null parameter doesn't work使用带有空参数的 AFNetworking 上传图像不起作用
【发布时间】:2015-10-21 15:44:39
【问题描述】:

我也想将图片上传到服务器,但上传时出错

我使用了以下代码,但不知道其中有什么问题

+(void) HTTPPostImage:(NSString *) stringURL andParameter:(NSData *) imageData andSelector:(SEL) selector andTarget:(id) target{

    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:stringURL]];
   // NSData *imageData = UIImageJPEGRepresentation(self.avatarView.image, 0.5);
    NSDictionary *parameters =NULL;
    NSString *myUUID = [[NSUUID UUID] UUIDString]; // create a UUID

    NSLog(@"myUUID%@",myUUID);


    AFHTTPRequestOperation *op = [manager POST:@"" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"public.image" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
        //[formData appendPartWithFileData:imageData name:@"file" fileName:myUUID mimeType:@"image/jpeg"];

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@ ***** %@", operation.responseString, error);
    }];
    [op start];
}

不知道这个参数有什么问题

[formData appendPartWithFileData:imageData name:@"public.image" fileName:@"photo.jpg" mimeType:@"image/jpeg"];

服务器参数

不知道是我做错了还是服务器做错了

【问题讨论】:

    标签: ios objective-c afnetworking-2


    【解决方案1】:

    请尝试以下代码。希望它对你有用。

        NSData *tempData = [NSData dataWithContentsOfFile:YOUR_IMAGE_FILE_PATH];
    
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
        [manager POST:YOUR_REQUEST_URL parameters:YOUR_PARAMETERS constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            if (tempData) {
                [formData appendPartWithFileData:tempData name:@"user_image" fileName:@"avatar.jpeg" mimeType:@"image/jpeg"];
            }
        } success:^(AFHTTPRequestOperation *operation, id responseObject){
            NSError *error;
            NSDictionary* json = [NSJSONSerialization
                                  JSONObjectWithData:operation.responseData
                                  options:kNilOptions
                                  error:&error];
            NSLog(@"Registration JSON:- %@",json);
        }failure:^(AFHTTPRequestOperation *operation, NSError *error){
            NSLog(@"Error: %@", error);
        }];
    

    “user_image”是图像的关键参数。此密钥在 API 请求参数中设置。

    谢谢:)

    【讨论】:

    • YOUR_IMAGE_FILE_PATH 这里要包含什么,对于 user_image 我很困惑
    • YOUR_IMAGE_FILE_PATH 是在服务器上发送的图像的路径,user_image 是图像的参数。该参数包含图像数据。
    • 不知道是我这边还是服务器端出错了
    • 我已经发布了我的服务器信息的屏幕截图,你可以看看
    • @nischal had:图像的参数在哪里?需要在 Data Params 中设置图像参数。请向您的 API 开发人员询问图像参数。
    【解决方案2】:

    添加您的 URL 最后一个组件名称并更改您的代码,如下所示:

    AFHTTPRequestOperation *op = [manager POST:@"suburl.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileData:imageData name:@"userfile" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
            //[formData appendPartWithFileData:imageData name:@"file" fileName:myUUID mimeType:@"image/jpeg"];
    

    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://yourbaseurl.com/"]];
    // NSData *imageData = UIImageJPEGRepresentation(self.avatarView.image, 0.5);
    NSDictionary *parameters =NULL;
    NSString *myUUID = [[NSUUID UUID] UUIDString]; // create a UUID
    
    NSLog(@"myUUID%@",myUUID);
    
    
    AFHTTPRequestOperation *op = [manager POST:@"suburl.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"userfile" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
        //[formData appendPartWithFileData:imageData name:@"file" fileName:myUUID mimeType:@"image/jpeg"];
    
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@ ***** %@", operation.responseString, error);
    }];
    [op start];
    

    【讨论】:

    • 我对名称感到困惑:@"userfile" fileName:@"photo.jpg" mimeType:@"image/jpeg"] 如果用户单击图像,这些参数应该是什么
    • @"userfile" 是 php 服务端 @nischalhada 中的图像参数类型
    • 我已经使用 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 来捕获图像。你能给我一些想法什么是参数
    • 不知道是我这边还是服务器端出错了
    • 我已经发布了我的服务器信息的屏幕截图,你可以看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多