我在这里找到了通过Soap消息上传文件的详细信息。但我有另一个问题,如果Soap中有大文件,那么它会产生内存问题,这会导致通过Soap消息发送的文件加载到内存中。
我读过关于MTOM(消息传输优化机制)的文章。"当您使用MTOM/XOP优化SOAP消息时,XOP处理将其串行化为MIME多部分/相关消息。XOP处理从SOAP中提取base64Binary数据,并将其打包为MIME消息中的独立二进制附件,其方式与电子邮件附件类似"
我发现了如何在java中使用这种方法Soap with Attachments和java 中的MTOM
现在我有两个问题:-
- 通过在iOS中使用MTOM/XOP方法,我们可以减少或解决内存问题,如上所述
- 在编程中我们如何在iOS中使用MTOM/XOP方法
任何帮助都会得到通知。提前谢谢。
我使用Rest Kit完成了同样的请求。Rest Kit允许在MTOM规范中发送附件。
你需要的第一件事是下载Restkit。
以下是使用RestKit的MTOM的代码片段。
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
}