2015-06-30 7 views
7

नीचे अपलोड करने के लिए, एक छवि file.I केवल NSURLSessionUploadTask उपयोग करना चाहते हैं अपलोड करने के लिए छोटा सा अंश है, क्योंकि यह पृष्ठभूमि अपलोड सुविधा जो मैं अपने अनुप्रयोग में उपयोग करना चाहते हैं देता है असफल रहा।NSURLSessionUploadTask फ़ाइल

इसके अलावा मैं फ़ाइल अपलोड के साथ पैरामीटर पोस्ट करना चाहता हूं।

इसके अलावा मैं सर्वर साइड में अच्छा नहीं हूँ code.Can किसी को भी कृपया मुझे मार्गदर्शन क्या मैं गलत कर रहा हूं।

अपलोड कोड

NSString* filePath = [[NSBundle mainBundle] 
         pathForResource:@"sample" ofType:@"jpg"]; 
uint64_t bytesTotalForThisFile = [[[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:NULL] fileSize]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:uploadPath]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:[NSString stringWithFormat:@"%llu", bytesTotalForThisFile] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"]; 

[request setTimeoutInterval:30]; 

NSString* filePath = [[NSBundle mainBundle] 
         pathForResource:@"sample" ofType:@"jpg"]; 


NSURLSessionUploadTask *taskUpload= [self.uploadSession uploadTaskWithRequest:request fromFile:[[NSURL alloc] initFileURLWithPath:filePath]]; 

पीएचपी कोड

<?php 

$objFile = & $_FILES["file"]; 
$strPath = basename($objFile["name"]); 

if(move_uploaded_file($objFile["tmp_name"], $strPath)) { 
    print "The file " . $strPath . " has been uploaded."; 
} else { 
    print "There was an error uploading the file, please try again!"; 
} 

सर्वर की ओर से मैं मैं कोड का एक उदाहरण रखा जाएगा $ _FILES

उत्तर

0

के लिए खाली सरणी हो रही है। जांचें कि क्या आपको कंसोल पर कोई त्रुटि है या नहीं।

// 1. config 
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; 

// 2. if necessary set your Authorization HTTP (example api) 
// [config setHTTPAdditionalHeaders:@{@"<setYourKey>":<value>}]; 

// 3. Finally, you create the NSURLSession using the above configuration. 
NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; 

// 4. Set your Request URL 
NSURL *url = <yourURL>; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 

// 5. Set your HTTPMethod POST or PUT 
[request setHTTPMethod:@"PUT"]; 

// 6. Encapsulate your file (supposse an image) 
UIImage *image = [UIImage imageNamed:@"imageName"]; 
NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 

// 7. You could try use uploadTaskWithRequest fromData 
NSURLSessionUploadTask *taskUpload = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

    NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response; 
    if (!error && httpResp.statusCode == 200) { 

     // Uploaded 

    } else { 

     // alert for error saving/updating note 
     NSLog(@"ERROR: %@ AND HTTPREST ERROR : %ld", error, (long)httpResp.statusCode); 
     } 
}]; 
+0

मैं पृष्ठभूमि सत्र का उपयोग कर रहा डिफ़ॉल्ट नहीं, इसके अलावा पूरा होने हैंडलर पृष्ठभूमि session.Also NSData में अनुमति नहीं है के रूप में छवि छवि के रूप में अनुमति नहीं है। – Mukesh

0

अगर वह पूरा कोड है, तो आप अपलोड शुरू वास्तव में नहीं हैं। NSURLSession कार्य स्वचालित रूप से प्रारंभ नहीं होते हैं (कुछ NSURLConnection कॉल के विपरीत)। अपलोड को शुरू करने के लिए आपको अपनी रेज़्यूमे विधि को स्पष्ट रूप से कॉल करना होगा, या कार्य बस वहां बैठेंगे और कुछ भी नहीं करेंगे।

दूसरा, आपको वास्तव में पथ का उपयोग करने के बजाय URLForResource का उपयोग करना चाहिए और फिर इसे किसी URL में परिवर्तित करना चाहिए। यह आपके कोड को तोड़ना नहीं चाहिए, लेकिन यह शुरू करने के लिए यूआरएल का उपयोग करने के लिए बहुत साफ है।

तीसरा, यदि आपको वास्तव में पथ का उपयोग करने की आवश्यकता है, तो सुविधा विधियां (fileURLWithPath:) आपके मित्र हैं।

चौथा, आप सामग्री-लंबाई, और IIRC स्थापित करने के लिए, तो आप शायद नहीं करना चाहिए, क्योंकि आपने कौन सी सामग्री लंबाई वास्तव में हो सकता है अगर NSURLSession एन्कोडिंग किसी भी प्रकार की बातचीत करता पता नहीं है की जरूरत नहीं है (उदाहरण के लिए फ़ाइल डेटा संपीड़ित)।

पांचवां, यदि फ़ाइल बड़ी है, 30 सेकंड नहीं काफी लंबे समय हो सकता है।

छठी, यदि आप आईओएस या ओएस एक्स के नए संस्करणों पर चला रहे हैं, सुनिश्चित करें कि आप या तो एक ठीक से विन्यस्त HTTPS सर्वर का उपयोग कर रहे हैं या आप एक उपयुक्त अनुप्रयोग परिवहन सुरक्षा अपवाद को शामिल किया है कि हो सकता है।

अंत में, यदि आप के बजाय अन्य पोस्ट मानकों सिर्फ अनुरोध निकाय के रूप में डेटा की ब्लॉब प्रदान शामिल करना चाहते हैं, तो आप एक स्ट्रीमिंग का अनुरोध का उपयोग करना होगा। आप निश्चित रूप से जीईटी पैरामीटर का उपयोग कर सकते हैं, और यही वह है जो मैं आपको सलाह दूंगा कि आप ऐसा करते हैं, क्योंकि यह चीजों को करने का एक बहुत आसान तरीका है। :-)