2013-11-14 14 views
5

गैलरी से संपत्ति अपलोड करने के लिए पृष्ठभूमि हस्तांतरण का उपयोग करने का सबसे अच्छा तरीका क्या है?NSURL सत्र: पृष्ठभूमि हस्तांतरण के साथ संपत्ति अपलोड करना

uploadTaskWithRequest:fromData: की तरह लगता है NSURLSessionbackgroundSessionConfiguration के साथ बनाया के साथ काम नहीं करता है, क्योंकि यह एक अपवाद का कारण बनता है: "न आया हुआ अपवाद 'NSGenericException', कारण की वजह से उनका समापन एप्लिकेशन: 'पृष्ठभूमि सत्रों में कार्य अपलोड एक फ़ाइल से होना चाहिए"। अपवाद विवरण पृष्ठभूमि हस्तांतरण से निर्णय स्ट्रीम किए गए अपलोड कार्यों के साथ भी काम नहीं करना चाहिए।

पर्याप्त मेला। uploadTaskWithRequest:fromFile: पहली बात है जो दिमाग में आती है जब आप डिस्क पर पहले से मौजूद डेटा अपलोड करने के बारे में सोचते हैं। लेकिन NSURL सत्र क्लास संदर्भ हमें बताता है कि यह विधि केवल फाइल यूआरएल के साथ काम करती है, लेकिन जब आपको संपत्ति का यूआरएल पथ मिलता है तो यह "संपत्ति-पुस्तकालय: // परिसंपत्ति/..." से शुरू होता है और यह पथ प्रदान करना भी काम नहीं करता है।

तो ऐसा लगता है कि एकमात्र विकल्प शेष संपत्ति लाइब्रेरी से फ़ाइल को अस्थायी निर्देशिका में कॉपी करना है, और uploadTaskWithRequest:fromFile: पर अपनी फ़ाइल यूआरएल प्रदान करना है। लेकिन यह कोई समझ नहीं आता है क्योंकि आपके पास पहले से ही आपकी डिस्क पर संपत्ति फ़ाइल सहेजी गई है। क्या मुझे कुछ याद आ रही है?

अद्यतन:

टेक वार्ता घटना में एप्पल इंजीनियर के साथ बात और उन्होंने पुष्टि की कि पृष्ठभूमि NSURLSession केवल फ़ाइल URL समर्थन करता है। तो वास्तव में, आपको संपत्ति लाइब्रेरी को एक अस्थायी निर्देशिका में कॉपी करने की आवश्यकता है, और इसे पृष्ठभूमि NSRLSession के साथ अपलोड करने के लिए uploadTaskWithRequest:fromFile: पर अपनी फ़ाइल यूआरएल प्रदान करें। हालांकि यह व्यवहार भविष्य में बदल सकता है।

उत्तर

2

वे दस्तावेज़ में कहीं भी कहते हैं कि यूआरएलएस अपलोड अपलोड/डाउनलोड केवल http https योजनाओं को फ़ाइल करें। पृष्ठभूमि केवल http/https का समर्थन करता है।
मेरा मानना ​​है कि तकनीकी रूप से मान्य यूआरएल होने के बावजूद मूल डेटा और संपत्ति लाइब्रेरी यूआरएल वास्तव में यूआरएल नहीं हैं, और संभवतः कस्टम एनएसयूआरएलप्रॉटोकॉल बनाकर लागू नहीं किया जाता है।

तो मुझे विश्वास है कि आपको कुछ फ़ाइल में संपत्ति लिखनी चाहिए और कार्य अपलोड करने के लिए उस फ़ाइल में एक यूआरएल पास करना चाहिए। मैं ऐसी परियोजना पर काम कर रहा हूं जो संपत्तियों को अपलोड करता है और मैंने पृष्ठभूमि सत्र का उपयोग करके इसे रद्द करने के लिए अभी शुरू कर दिया है। तो मैं इस सिद्धांत को साबित करने के लिए आज बाद में अपने लिए कोशिश करूँगा।

+0

ठीक है, हाँ। फ़ाइल की प्रतिलिपि मूल रूप से मैं अब कर रहा हूं। Nsursession के साथ आपकी प्रगति कैसे है? –

+0

आपका अनुमान सही प्रतीत होता है। –

+0

@RobertGeifman तो मूल रूप से अपलोड करें TaskWithRequest: सेडेटा: काम नहीं करता है? – marciokoko

संबंधित मुद्दे