【问题标题】:iOS - POST an image to server by RestyiOS - Resty 将图像发布到服务器
【发布时间】:2012-08-15 13:21:30
【问题描述】:

我之前使用this method POST 一个图片到服务器,但它有点复杂,因为我必须自己添加标题和边界。昨天我发现了一个名为Resty 的项目——“A simple Objective-C HTTP client for iOS and Mac”。但是,在阅读了它的所有文档后,我找不到任何上传图像文件的方法。请帮忙,非常感谢。

NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:@"this is a title" forKey:@"title"];

// ***How can I add an image by Resty?***
[params setObject:UIImageJPEGRepresentation(self.image, 1.0) forKey:@"image"];

LRRestyClient *client = [LRResty client];
[client setUsername:userId password:userToken];
[client post:APIImageUrl payload:params withBlock:^(LRRestyResponse *response){
    NSLog(@"Done");
}];

【问题讨论】:

    标签: iphone ios rest http-headers


    【解决方案1】:

    我认为这个框架不能正确处理图像数据和自定义参数,你可以按照这个主题创建正确的 NSData 格式

    How to upload image and text using HTTP POST?

    或者如果你个人想要更成熟的框架,我建议使用 restkit。 在我的项目中,我使用此示例代码将图像发送到休息服务

     RKObjectManager *service = restkit_manager; //initialized previously
          [service loadObjectsAtResourcePath:@"/api/ChangeProfileImage" usingBlock:^(RKObjectLoader *loader) {
                loader.delegate      = self;
                loader.method        = RKRequestMethodPOST;
                loader.cachePolicy   = RKRequestCachePolicyNone;
                loader.objectMapping = (RKObjectMapping *) [service.mappingProvider mappingForKeyPath:MAPPING_PROFILE_IMAGE_UPDATE];
    
                NSMutableDictionary *params_dict = [NSMutableDictionary new];
    
               //custom parameters
               [params_dict setValue:UserKey forKey:@"UserKey"];
    
                RKParams *params = [RKParams paramsWithDictionary:params_dict];
                //encoded image
                [params setData:data MIMEType:@"image/png" forParam:@"FileName"];
    
                loader.params                = params;
                loader.serializationMIMEType = RKMIMETypeJSON;
            }];
    

    这张幻灯片可能会给你一些想法http://www.slideshare.net/tkalapun/restfull-with-restkit

    【讨论】:

      【解决方案2】:

      我用ASIHTTPRequest,非常简单,功能强大。 我认为使用这个库是另一种选择。

      我的示例代码是...

      NSURL *url = [NSURL URLWithString:@"http://endpoint"];
      NSData *data = [self addMetadata:UIImageJPEGRepresentation(self.image, 1.0)];
      
      ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
      [ASIFormDataRequest setDefaultTimeOutSeconds:90];
      [ASIFormDataRequest setShouldThrottleBandwidthForWWAN:YES];
      
      [request setNumberOfTimesToRetryOnTimeout:3];
      [request setAllowCompressedResponse:NO];
      
      [request setData:data withFileName:@"photo.jpg" andContentType:@"image/jpeg" forKey:@"image"];
      [request startSynchronous];
      

      【讨论】:

        猜你喜欢
        • 2017-10-13
        • 2015-09-13
        • 2015-12-03
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多