5

我在这里找到了通过 Soap 消息上传文件的详细信息。但是我还有另一个问题,如果 Soap 中有大文件,那么它会产生内存问题,导致内存中的文件加载以通过Soap 消息发送

我阅读了有关 MTOM(消息传输优化机制)的信息。“当您使用 MTOM/XOP 优化SOAP 消息时,XOP处理将其序列化为 MIME Multipart/Related 消息。XOP 处理从SOAP 消息中提取base64Binary数据并将其打包为MIME消息中的单独二进制附件,在类似于电子邮件附件的方式”

我在这里找到了如何在 Java 中使用这种方法Soap with Attachments and MTOM in Java

现在我有两个问题:-

  1. 通过在iOS中使用MTOM/XOP方法,我们可以减少或解决上面解释的内存问题。
  2. 在编程中我们如何在iOS中使用MTOM/XOP方法。

任何帮助都会得到帮助。在此先感谢。

4

1 回答 1

0

我使用 Rest Kit 完成了相同的请求。Rest 套件允许发送 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
    }
于 2013-10-24T09:24:31.313 回答