2017-01-12 2 views
0

Мне нужно загрузить видео на сервер SOFTLAYER (IBM Cloud) с помощью Objective C. Я использую xcode7.2 с Objective C. Я не знаю, как загружать видео в облачный базовый сервер с использованием Objective C. При переходе на ссылку SOFTLAYER API нет руководства для iOS или как реализовать SOFTLYAER с помощью Objective C. Мой вопрос заключается в том, как интегрировать SOFTLAYER в Xcode и как реализовать это.Загрузить видео в SOFTLAYER (IBM Cloud)

Я добавляю снимок экрана SOFTLAYER guide нет руководства для iOS. SOFTLAYER GUIDE IMAGE

Если вы загружаете видео на сервер SOFTLAYER с использованием Objective C или если у вас есть какие-либо идеи по этому поводу, пожалуйста, помогите.

Заранее спасибо.

+0

Обнаружена ссылка Github (https://github.com/softlayer?utf8 =% E2% 9C% 93 & q = & type = & language = object-c) для службы сообщений SOFTLAYER. Но cannnot нашел какой-либо softlayer-object-storage для iOS. точно так же (https://github.com/softlayer?utf8=%E2%9C%93&q=&type=&language=php). Если у кого-нибудь есть полезная ссылка для хранения softlayer-объектов в iOS, пожалуйста, помогите. –

ответ

0

да как вы написали все клиенты SOFTLAYER здесь:

https://github.com/softlayer

Однако не существует конкретного клиента для управления хранилищем объектов, используя Objective-C, но вы можете управлять хранением объектов SOFTLAYER, используя простой отдых запросов и иметь возможность загружать ваше видео успешно, я уверен, что Objective-C предоставляет API для обработки запроса REST.

вы можете увидеть здесь руководство об управлении хранения объектов, используя остальные здесь:

https://sldn.softlayer.com/blog/waelriac/managing-softlayer-object-storage-through-rest-apis

Позвольте мне знать, если у вас есть вопросы

С уважением

+0

Спасибо @Nelson за вашу ценную помощь. Это будет очень полезно для меня. Я реализую это. Есть ли какой-нибудь образец кода для такого типа загрузки видео. Я нашел эту ссылку (http://sldn.softlayer.com/article/REST). Являются ли обе ссылки одинаковыми? –

+0

ссылки из softlayer, но в вашем комментарии говорится о том, как использовать REST с другими сервисами Sofltayer. о примерах, связанных с видео. Я боюсь сказать вам, что я никогда не видел примера с мягким слоем. Однако хранилище объектов Softlayer основано на Open Stack, поэтому, возможно, есть примеры загрузки видео для Open Stack. –

+0

Возможно, эти ссылки могут вам помочь, они связаны с загрузкой больших файлов для открытия стека, эта же идея работает с Softlayer: http://docs.openstack.org/user-guide/cli-swift-large-object-creation .html http://docs.openstack.org/developer/swift/overview_large_objects.html –

0

Благодаря @Nelson для этой ссылки Softlayer Object Storage access through rest api. По этой ссылке мы можем загружать видео в хранилище объектов непосредственно из приложения. Для получения дополнительной информации вы видите эту ссылку Access Softlayer using Postman.

Я загружаю видео в хранилище объектов softlayer с помощью вызова rest api. Я звоню REST API с помощью AFNetworking в Objective C. Ниже приведены следующие простые шаги: -

Мои authToken является: - "AUTH_tk9eafc199756fabe8066f"

1) Получить "токен аутентификации" и «X-накопителя данных URL «с сервера хранения объектов softlayer. Вы можете получить это, используя «Конечная точка аутентификации (общедоступная и приватная)», это api. Отправка «имени пользователя» и «API-ключа (пароля)» в поле заголовка.

-(void)callRestAPI{ 

NSURL *URL = [NSURL URLWithString:@"https://sjc01.objectstorage.softlayer.net/auth/v1.0/"]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
[manager.requestSerializer setValue:@"HJYBOS984353-3:ghym8435" forHTTPHeaderField:@"X-Auth-User"]; 
[manager.requestSerializer setValue:@"26704dbc93e5c39986da451e539857f6596dc9be18aad7a6b4dc2822f48e66f8" forHTTPHeaderField:@"X-Auth-Key"]; 
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 

    NSHTTPURLResponse *response = ((NSHTTPURLResponse *)[task response]); 
    NSDictionary *headers = [response allHeaderFields]; 
    authURL = [headers valueForKey:@"X-Storage-Url"]; 
    authToken = [headers valueForKey:@"X-Auth-Token"]; 
    NSLog(@"\nHeader Token:: %@ \n Header URL:: %@ \n",authToken,authURL); 

    [PMCommonClass userDefaultValueSave:authToken key:SOFTLAYER_AUTH_TOKEN]; 
    [PMCommonClass userDefaultValueSave:authURL key:SOFTLAYER_AUTH_URL]; 

    NSDictionary *mainDict = [PMCommonClass jsonDictionaryFromResponse:responseObject]; 
    NSLog(@"Main Dict:: %@",mainDict); 
} failure:^(NSURLSessionTask *operation, NSError *error) { 
    NSLog(@"Error:: %@", error.localizedDescription); 
}]; 
} 

2) После того, что от "токен аутентификации" и "х-Storage-URL" мы можем создали контейнер в хранилище объектов.

-(void)createConatiner{ 
NSString *authUrl = @"https://sjc01.objectstorage.softlayer.net/v1/AUTH_695d079a-ead3-4045-b303-a1b123acdb3db"; 
NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/Container6",authUrl]]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
[manager.requestSerializer setValue:authToken forHTTPHeaderField:@"X-Auth-Token"]; 
[manager PUT:URL.absoluteString parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSHTTPURLResponse *response = ((NSHTTPURLResponse *)[task response]); 
    NSDictionary *headers = [response allHeaderFields]; 
    NSLog(@"Header Dict:: %@",headers); 
    if ([response statusCode] == 201) { 
     //Successfully container created 
    }else{ 
     //Some problem occure 
    } 

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"Error:: %@", error.localizedDescription); 
}];} 

3) На последнем видео загрузки в контейнере с помощью "Auth маркеров" и "х-Storage-URL" с сильфоном кодом

-(void)uploadFileInContainer{ 
NSString *authUrl = @"https://sjc01.objectstorage.softlayer.net/v1/AUTH_695d079a-ead3-4045-b303-a1b123acdb3db"; 
//Get Video From Document Directory 
NSError *error = nil; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *videoFilePath = [documentsDirectory stringByAppendingFormat:@"/vid10.mp4"]; 

//Convert video url to NSData 
NSData *videoData = [NSData dataWithContentsOfFile:videoFilePath options:NSDataReadingMappedIfSafe error:&error]; 
if (videoData != nil) { 

    if ([PMCommonClass isNetworkRechable]) { 

     NSString *urlString = [NSString stringWithFormat:@"%@/Container5/Video4.mp4",authUrl]; 
     NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"PUT" URLString:urlString parameters:nil error:nil]; 
     [request setValue:authToken forHTTPHeaderField:@"X-Auth-Token"]; 
     [request setValue:@"video/mp4" forHTTPHeaderField:@"Content-Type"]; 
     [request setValue:@"video/mp4" forHTTPHeaderField:@"Accept"]; 

     NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
     AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:configuration]; 

     NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromData:videoData progress:^(NSProgress * _Nonnull uploadProgress) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSLog(@"UPLOAD Progress==>%f",uploadProgress.fractionCompleted*100); 
      }); 
     } completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
      if (error) { 
       NSLog(@"Error: %@", error.localizedDescription); 
      } else { 
       NSLog(@"Success: %@ %@", response, responseObject); 
      } 
     }]; 
     [uploadTask resume]; 
    } 
}} 

4) Затем загрузите этот загруженный объект из контейнера для хранения объекта с использованием тот же процесс.

-(void)getObject{ 
NSString *authUrl = @"https://sjc01.objectstorage.softlayer.net/v1/AUTH_695d079a-ead3-4045-b303-a1b123acdb3db"; 
NSString *authToken = @"AUTH_tk9eafc199756fabe8066f"; 
NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/Container5/Video4.mp4",authURL]]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
[manager.requestSerializer setValue:authToken forHTTPHeaderField:@"X-Auth-Token"]; 
[manager.requestSerializer setValue:@"video/mp4" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setValue:@"video/mp4" forHTTPHeaderField:@"Accept"]; 
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 

    NSHTTPURLResponse *response = ((NSHTTPURLResponse *)[task response]); 
    NSDictionary *headers = [response allHeaderFields]; 
    NSLog(@"Header Dict:: %@",headers); 

    //NSLog(@"Response OBJ:: %@",responseObject); 
    //UIImage *image = [UIImage imageWithData:responseObject]; 
    //NSLog(@"uiiamge %@",image); 


    NSData *videoData = responseObject; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *tempPath = [documentsDirectory stringByAppendingFormat:@"/video1026.mp4"]; 
    BOOL success = [videoData writeToFile:tempPath atomically:NO]; 
    if (success) { 
     NSLog(@"save Path is:: %@",tempPath); 
    } 

} failure:^(NSURLSessionTask *operation, NSError *error) { 
    NSLog(@"Error:: %@", error.localizedDescription); 
}];} 

Это следующий шаг для загрузки и скачивания видео с хранения объектов softlayer.

Смежные вопросы