2015-07-13 9 views
8

का उपयोग कर वेब सेवा का उपयोग करके ऑडियो भेजो हाय, मेरे पास एक ऑडियो है जिसे मुझे अन्य इनपुट के साथ एक webservice का उपयोग करके भेजने की आवश्यकता है। कुछ खोज करने के बाद मुझे समझ में आया कि मैं एक्सएमएल साबुन संदेश का उपयोग करके एनएसडीएटी नहीं भेज सकता, इसलिए मैंने AFHTTPRequest क्लासेस डाउनलोड किए और इंटरनेट पर उदाहरणों का पालन किया, लेकिन यह काम नहीं कर रहा है।AFNetworking

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"m4a"]; 

NSData *audio = [NSData dataWithContentsOfFile:filePath]; 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

NSString *URLString = @"http://host.com/Websr/Service.asmx?op=addlocation2";//[WebService getAudioURL]; 
NSDictionary *parameters = @{@"userid": @2, 
          @"name": @"usertest", 
          }; 

manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"audio/m4a", nil]; 
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

    if (audio) { 
     [formData appendPartWithFileData:audio name:@"voicemsg" fileName:[NSString stringWithFormat:@"test.m4a"] mimeType:@"audio/m4a"]; 
    } 
} success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"Success %@", responseObject); 
    NSLog(@"operation %@", operation.responseString); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Failure" message:@"Sending Failure" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
    NSLog(@"Failure %@, %@", error, operation.responseString); 
}]; 

[self dismissViewControllerAnimated:NO completion:nil]; 

एप्लिकेशन जब उस पर अतिरिक्त बुरा उपयोग के साथ क्रैश हो रहा है:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <addlocation2 xmlns="http://tempuri.org/"> 
     <userid>int</userid> 
     <name>string</name> 
     <voicemsg>base64Binary</voicemsg> 
    </addlocation2> 
    </soap:Body> 
</soap:Envelope> 

इस कोड को मैं डेटा और अन्य पैरामीटर भेजने के लिए उपयोग कर रहा हूँ है: यह वेब सेवा मैं उपयोग कर रहा हूँ है तक पहुँच जाता है अगर बयान वर्ग AFURLResponseSerialization.h में डेटा युक्त

- (BOOL)validateResponse:(NSHTTPURLResponse *)response 
       data:(NSData *)data 
       error:(NSError *)error 
{ 
BOOL responseIsValid = YES; 
NSError *validationError = nil; 

if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { 
    if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { 
     NSLog(@"[response URL] %@", [response URL]); 
     if ([data length] > 0 && [response URL]) { 
       ...} 

किसी भी सलाह बहुत सराहना कर रहा है। धन्यवाद।

उत्तर

3

आपको AFHTTPRequest क्लासेस का उपयोग करने की आवश्यकता नहीं है। आपकी आवश्यकता सिर्फ नेटवर्क पर बेस 64 बाइनरी डेटा भेजने के लिए है, जो आपकी वेब सेवा कहती है। नीचे दिए गए लिंक का पालन करें, यह सहायक होगा। http://iosdevelopertips.com/core-services/encode-decode-using-base64.html

+1

आपकी टिप के लिए धन्यवाद, मैं तुरंत डेटा भेजने का एक तरीका खोज रहा हूं, क्योंकि जब मैं इसे स्ट्रिंग प्रकार के रूप में भेजता हूं तो यह बहुत बड़ा होता है और डेटाबेस में बहुत अधिक जगह लेता है, लेकिन अगर मैं भेजता हूं यह डेटा के रूप में, डेटाबेस इसे स्वचालित रूप से बाइट्स में बदल देता है और इसे स्मार्ट तरीके से सहेजता है, इसलिए यह स्मृति में बहुत अधिक जगह नहीं लेता है और आसानी से पुनर्प्राप्त किया जा सकता है। – coder