내 응용 프로그램에서 문서에 서명하는 webservice를 사용하고 있습니다. SOAP 호출 내에서 document64를 base64 형식으로 보내야합니다. 문제는 내가 11mb와 같은 큰 문서를 보내려고 할 때 base64 (NSString에 저장 됨)가 크고 SOAP 메시지가 잘리는 문제입니다.NSString이 잘리고 있습니다
SOAP 호출을 유용하게 보낼 수 있으므로 서버 오류가 발생합니다.
큰 (매우 큰) 문자열을 저장할 수있는 클래스가 있습니까?
편집 :
가 64 기수로 문서를 변환하려면 :
NSString *soapMsg = [NSString stringWithFormat:@"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\" xmlns:seal=\"http://schemas.datacontract.org/2004/07\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<tem:Sign>"
"<tem:type>Signature</tem:type>"
"<tem:biometricState>%@</tem:biometricState>"
"<tem:idCertificate>%d</tem:idCertificate>"
"<tem:signatureProfile>%@</tem:signatureProfile>"
"<tem:signatureType>Default</tem:signatureType>"
"<tem:hashAlgorithm>Default</tem:hashAlgorithm>"
"<tem:options>%@</tem:options>"
"<tem:signingDocument>%@</tem:signingDocument>"
"</tem:Sign>"
"</soapenv:Body>"
"</soapenv:Envelope>",
aSign,
[aCertificado idCert],
tipoFirma,
flagFirma,
aDocument
];
NSString *stringURL = [NSString stringWithFormat:@"http://%@//Service/SignatureServiceBasic.svc", [settings servidor]];
NSURL *sRequestURL = [NSURL URLWithString:stringURL];
NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:sRequestURL];
NSString *sMessageLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
[myRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[myRequest addValue:@"http://tempuri.org/ISignatureServiceBasic/Sign" forHTTPHeaderField:@"SOAPAction"];
[myRequest addValue: sMessageLength forHTTPHeaderField:@"Content-Length"];
[myRequest setHTTPMethod:@"POST"];
[myRequest addValue:@"Jakarta Commons-HttpClient/3.1" forHTTPHeaderField:@"User-Agent"];
[myRequest setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
NSString* username = [settings usuario];
NSString* password = [settings pass];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", username, password];
NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodingWithLineLength:80]];
[myRequest setValue:authValue forHTTPHeaderField:@"Authorization"];
signConnection = [[NSURLConnection alloc] initWithRequest:myRequest delegate:self];
if(signConnection) {
webResponseData = [NSMutableData data];
}else {
NSLog(@"Some error occurred in Connection");
}
aDocument
가 있습니다 :
NSData *signData = [[NSFileManager defaultManager] contentsAtPath:self.pathDocument];
NSString *base64file = [signData base64EncodedString];
통화를 수행하려면이 내가 사용했던 코드 base64의 문서.
미리 감사드립니다.
NSString은 메모리에 맞는 크기라면 어떤 크기라도 저장할 수 있습니다. 다른 곳에서 문제를 찾을 수 있습니다. 코드를 보여줘야합니다. – CouchDeveloper