Загрузите файл с помощью сообщения Soap, используя MTOM в iOS
Я нашел здесь Загрузить файл через сообщение Мыло в деталях. Но у меня есть еще одна проблема, если в Soap есть большой файл, то это создает проблемы с памятью из-за загрузки файла в память для отправки через сообщение Soap.
Я читал о MTOM (Механизм оптимизации передачи сообщений). "Когда вы используете MTOM/XOP для оптимизации сообщения SOAP, обработка XOP сериализует его в сообщение MIME Multipart/Related. Обработка XOP извлекает данные base64Binary из сообщения SOAP и упаковывает их как отдельные двоичные вложения в сообщении MIME, в аналогично вложениям в электронную почту "
Я нашел, как использовать этот подход в Java здесь Soap с вложениями и MTOM в Java
Теперь у меня есть два вопроса:
- Используя подход MTOM/XOP в iOS, мы можем уменьшить или решить проблему с памятью, как описано выше.
- В программировании Как мы можем использовать подход MTOM/XOP в iOS.
Любая помощь будет оценена. Спасибо заранее.
1 ответ
Я сделал тот же запрос, используя Rest Kit.Rest Kit позволяет отправлять вложения в спецификации MTOM.
Первое, что вам нужно, это скачать Restkit.
Ниже приведен фрагмент кода для MTOM с использованием RestKit.
abv.h
#import "RestKit/RestKit.h"
RKObjectManager *man;
RKObjectLoader *loader;
abc.m
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
//Start Progress bar
RKParams * params = [[RKParams alloc] init];
UIImage *image=[UIImage imageNamed:@"zbar-samples.png"];
RKObjectManager *man;
NSData * fileData=UIImageJPEGRepresentation(image,0.7);
[params setValue:@"1234" forParam:@"encryptedToken"];
[params setValue:modelObj.docNameTobeSent
forParam:@"documentName"];
RKParamsAttachment * attachments = [params setData:fileData forParam:@"file"];
[attachments setMIMEType:@"image/jpeg"];
[attachments setFileName:[NSString stringWithFormat:@"%@.jpeg",modelObj.name]];
self.man = [RKObjectManager objectManagerWithBaseURL:YOUR URL];
self.loader = [self.man loadObjectsAtResourcePathUsingPOSTRPC:@"upload.form" objectMapping:nil PostParams:params delegate:self];
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error
{
//Handle fail error
//stop Progress bar
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects
{
NSLog(@"%@",@"didLoadObjects");
}
- (void)objectLoaderDidFinishLoading:(RKObjectLoader*)objectLoader
{
NSLog(@"%@",@"objectLoaderDidFinishLoading");
//stop Progress bar
}
- (void)objectLoaderDidLoadUnexpectedResponse:(RKObjectLoader*)objectLoader
{
NSLog(@"%@",@"objectLoaderDidLoadUnexpectedResponse");
//stop Progress bar
}