2016-12-27 2 views

Antwort

0

Ich empfehle das Hochladen von Bildern würde auf den Server eines Dritten und dann die URL zu senden über XMPP.

Hier ist ein Beispiel mit Backendless, die 20 GB kostenlose Datei-Uploads bieten. Sie müssten auch die Backendless docs folgen ihren SDK und Setup, um die API-Schlüssel zu installieren:

[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) { 
}]; 

Oder an ein PHP-Server mit 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]; 

Dann können Sie das Bild und Thumbnail-URLs hinzufügen und die Bildabmessungen auf die XMPP-Nachricht:

[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]; 

ich würde empfehlen, den Körper auf die imageURL Einstellung, so dass das Bild openenterpr werden könnte d von einem Standard-XMPP-Client.

Wenn die Nachricht empfangen wird, können Sie die Details wieder zugreifen, wie folgt:

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]; 

Sie dann das Bild SDWebImage mit angezeigt werden kann.

Ich würde auch empfehlen ChatSDK, die eine vollständige Front-End-Messaging-Schnittstelle für iOS ist. Es enthält UITableView-Zellen zum Anzeigen von Bildnachrichten. Ich habe es verwendet, um einen XMPP-Messenger mit XMPPFramework zu erstellen.

+0

Ihre Antwort mag stimmen, aber die Frage ist markiert "swift", nicht "objective-c", also das ist eher off-topic ...:/ – Moritz

+0

Ah ja, das habe ich nicht gesehen, da es nicht war Ist nicht im Titel angegeben. Ich werde versuchen, eine Swift-Version bereitzustellen. –

+0

Die Sprache sollte * nie * im Titel sein, tatsächlich - ihr Platz ist in den Tags. Immer. // Vielen Dank. :) – Moritz

Verwandte Themen