Попытка загрузки данных на локальный сервер с помощью MKNetworkKit - PullRequest
2 голосов
/ 19 марта 2012

Я хочу загрузить данные, изображения, текстовые файлы, документы в формате PDF и т. Д. Я использую MKNetworkKit для чистого соединения. С примерами этой структуры я пытаюсь сделать это. Я добавляю в свой проект класс extends MKNetworkEngine с методом загрузки из файла:

#import "MKNetworkOperation.h"
#import "MKNetworkEngine.h"

@interface Uploader : MKNetworkEngine
-(MKNetworkOperation*) uploadFromFile:(NSString*) file 
                              onError:(MKNKErrorBlock) errorBlock; 
@end



#import "Uploader.h"

@implementation Uploader


-(MKNetworkOperation*) uploadFromFile:(NSString*) file 
                              onError:(MKNKErrorBlock) errorBlock 
{

    MKNetworkOperation *op = [self operationWithPath:@"IP:PORT/PROYECT/" 
                                              params:nil
                                          httpMethod:@"POST"];

    [op addFile:file forKey:@"upload"];
    [op setFreezable:YES];

    [op onCompletion:^(MKNetworkOperation* completedOperation) 
     {
         NSString *xmlString = [completedOperation responseString];
         NSUInteger start = [xmlString rangeOfString:@"<mediaurl>"].location;
          if(start == NSNotFound) 
          {
          NSLog(@"%@", xmlString);
          errorBlock(nil);
          return;
          }
          xmlString = [xmlString substringFromIndex:start + @"<mediaurl>".length];
          NSUInteger end = [xmlString rangeOfString:@"</mediaurl>"].location;
          xmlString = [xmlString substringToIndex:end];
     }
             onError:^(NSError* error) 
     {
         errorBlock(error);
     }];

    [self enqueueOperation:op];
    return op;

}
@end

Я добавил в свой интерфейс кнопку для загрузки файла, и в моем контроллере я создал метод с таким содержанием:

-(IBAction)uploadImageTapped:(id)sender 
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

    NSString *cachesDirectory = [paths objectAtIndex:0];
    NSString *uploadPath = [NSString stringWithFormat:@"%@/Imagen.jpg",cachesDirectory];
    //NSLog(@"%@",uploadPath);

    self.uploadOperation = [ApplicationDelegate.sampleUploader uploadFromFile:uploadPath  onError:^(NSError* error) 
                            {
                                [UIAlertView showWithError:error];
                            }];
  }

Наконец, я добавил объект Uploader в мой делегат приложения:

@property (strong, nonatomic) Uploader *sampleUploader;

и

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;

    //Uploader
    self.sampleUploader = [[Uploader alloc] initWithHostName:@"http://IP:PORT"
                                          customHeaderFields:nil];

    return YES;
}

Моя проблема в том, что я хочу загружать файлы, мой локальный хост недоступен, и я не знаю, почему ....

Есть идеи ???

Ответы [ 2 ]

1 голос
/ 09 апреля 2012

RichS прав. Вы не должны использовать http (протокол) в имени хоста.

0 голосов
/ 23 марта 2012

[Я наткнулся на ваш вопрос, пока искал помощи сам с MKNetworkingKit.]

Чтобы быстро прочитать ваш код, мне интересно, следует ли вам удалить 'http://' из вашего initWithHostName. Я уверен, что комплект добавляет 'http://' где-то в своем собственном init.

...