Здесь я использую IOS XMPP библиотеки (https://github.com/processone/demo-xmpp-ios) для моего приложения чата, может ли один помочь мне для загрузки изображения из этого library.thanksКак мы можем загружать изображение или фотографии на веб-сервер ejabberd XMPP?
ответ
Я рекомендовал бы загружать изображения на сервер третьей стороны, а затем отправить 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.
Ваш ответ может быть правильным, но вопрос отмечен как «быстрый», а не «объективный-c», поэтому это довольно не по теме ...:/ – Moritz
Ах да, я не видел этого, так как это wasn 't указано в названии. Я постараюсь предоставить версию Swift. –
Язык должен * никогда * быть в названии, на самом деле - его место в тегах. Всегда. // Благодаря. :) – Moritz