2016-12-27 7 views

ответ

0

Я рекомендовал бы загружать изображения на сервер третьей стороны, а затем отправить URL через XMPP.

Вот пример использования Backendless, который предлагает 20 ГБ бесплатных загрузок файлов. Вы должны также следовать документам Backendless установить их SDK и настройку API ключи:

[backendless.fileService.permissions grantForAllRoles:fileName operation:FILE_READ]; 
[backendless.fileService saveFile:fileName content:file response:^(BackendlessFile * file) { 

    // We have the url so we can send the message 

} error:^(Fault * fault) { 
}]; 

Или на PHP сервер с помощью AFNetworking:

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:_url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:file name:@"upfile" fileName:name mimeType:mimeType]; 
} error:nil]; 

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

NSURLSessionUploadTask *uploadTask; 
uploadTask = [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) { 
        } else { 
         NSString *filePath = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 

         // Send message here 

        } 
       }]; 

[uploadTask resume]; 

Затем вы можете добавить изображения и уменьшенную URL, и размеры изображения на сообщение XMPP:

[xmppMessage addBody:imageURL]; 
    [xmppMessage addAttributeWithName:bMessageImageURL stringValue:imageURL]; 
    [xmppMessage addAttributeWithName:bMessageThumbnailURL stringValue:thumbnailURL]; 
    [xmppMessage addAttributeWithName:bMessageImageWidth floatValue:width.floatValue]; 
    [xmppMessage addAttributeWithName:bMessageImageHeight floatValue:height.floatValue]; 

Я рекомендую устанавливать тело к imageURL так, что изображение может быть opene d от стандартного клиента XMPP.

Когда сообщение получено, вы можете получить доступ к деталям снова следующим образом:

NSString * imageURL = [[message attributeForName:bMessageImageURL] stringValue]; 
    NSString * thumbnailURL = [[message attributeForName:bMessageThumbnailURL] stringValue]; 
    float width = [[[message attributeForName:bMessageImageWidth] stringValue] floatValue]; 
    float height = [[[message attributeForName:bMessageImageHeight] stringValue] floatValue]; 

Затем можно отобразить изображение с помощью SDWebImage.

Я также рекомендовал бы этот ChatSDK, который является полнофункциональным интерфейсом обмена сообщениями для iOS. Он содержит ячейки UITableView для отображения сообщений изображений. Я использовал его для создания XMPP-мессенджера, используя XMPPFramework.

+0

Ваш ответ может быть правильным, но вопрос отмечен как «быстрый», а не «объективный-c», поэтому это довольно не по теме ...:/ – Moritz

+0

Ах да, я не видел этого, так как это wasn 't указано в названии. Я постараюсь предоставить версию Swift. –

+0

Язык должен * никогда * быть в названии, на самом деле - его место в тегах. Всегда. // Благодаря. :) – Moritz