मेरे पास एक फ्लेक्स फ़ाइल अपलोड स्क्रिप्ट है जो सर्वर पर फ़ाइलों को अपलोड करने के लिए URLRequest का उपयोग करती है। मैं http प्रमाणीकरण (सर्वर पर पासवर्ड संरक्षित निर्देशिका) के लिए समर्थन जोड़ना चाहता हूं, लेकिन मुझे नहीं पता कि इसे कैसे कार्यान्वित किया जाए - मुझे लगता है कि मुझे कक्षा को किसी भी तरह विस्तारित करने की आवश्यकता है, लेकिन मैं थोड़ा खो गया हूं।फ्लेक्स 3 - HTTP प्रमाणीकरण URLRequest का समर्थन कैसे करें?
मैंने निम्नलिखित को संशोधित करने की कोशिश की (URLRequest के साथ HTTPService को बदलना), लेकिन यह काम नहीं किया।
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
मैं, बाहर बिंदु चाहिए कि मैं जानकार नहीं हूँ जब यह ActionScript/फ्लेक्स के लिए आता है, हालांकि मैं सफलतापूर्वक कुछ हद तक अपलोड स्क्रिप्ट को संशोधित करने में कामयाब रहे है।
आपकी सहायता के लिए धन्यवाद: -
[संपादित करें] यहाँ मेरी प्रगति, नीचे दिए गए उत्तर के आधार पर की एक अद्यतन है, हालांकि मैं अभी भी इस काम करने के लिए नहीं मिल सकता है। मैंने आपके कोड को लागू करने का प्रयास किया है लेकिन मुझे कोई भाग्य नहीं मिला है।
HTTP प्रमाणीकृत स्थानों से निपटने के दौरान मुझे लगता है कि सामान्य व्यवहार यह है कि आईई 7 के साथ सभी ठीक है लेकिन फ़ायरफ़ॉक्स में जब मैं सर्वर पर फ़ाइल अपलोड करने का प्रयास करता हूं तो यह एक HTTP प्रमाणीकरण संकेत प्रदर्शित करता है - जो सही होने पर भी विवरण, बस अपलोड प्रक्रिया को रोकता है।
मुझे विश्वास है कि IE7 ठीक है कारण ब्राउज़र/फ्लैश घटक द्वारा साझा सत्र/प्रमाणीकरण जानकारी के नीचे है - हालांकि, फ़ायरफ़ॉक्स में यह मामला नहीं है और मुझे उपर्युक्त व्यवहार का अनुभव है।
यहाँ मेरी अद्यतन अपलोड समारोह है, अपने परिवर्तनों को शामिल:
private function pergress():void
{
if (fileCollection.length == 0)
{
var urlString:String = "upload_process.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&filetotal="+fileTotal;
if (ExternalInterface.available)
{
ExternalInterface.call("uploadComplete", urlString);
}
}
if (fileCollection.length > 0)
{
fileTotal++;
var urlRequest:URLRequest = new URLRequest("upload_file.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&obfuscate="+obfuscateHash+"&sessidpass="+sessionPass);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("name=Bryn+Jones");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("testuser:testpass");
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
urlRequest.requestHeaders.push(credsHeader);
file = FileReference(fileCollection.getItemAt(0));
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
file.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
file.upload(urlRequest);
}
}
जैसा कि ऊपर कहा, मैं के साथ या मेरे समारोह में संशोधन के बिना ही परिणाम का सामना कर रहे हैं।
क्या मैं यह भी पूछ सकता हूं कि crossdomain.xml कहाँ स्थित होना चाहिए - क्योंकि मेरे पास वर्तमान में कोई नहीं है और यह सुनिश्चित नहीं है कि इसे कहां रखा जाए।
crossdomain.xml अपने वेब अनुप्रयोग की रूट निर्देशिका में रखा जाना चाहिए। तो अगर जिसमें फ़ाइलों www.yoursite.com डी में स्थित हैं: \ वेबसाइटों \ yoursite.com, फ़ाइल के पथ d किया जाना चाहिए: \ वेबसाइटों \ yoursite.com \ crossdomain.xml। –
अपने corssdomain.xml फ़ाइल रखकर के अलावा (जो आपको क्या करना चाहिए), तुम्हें पता है जो फ़्लैश प्लेयर संस्करण आप स्थापित हो गया गया है करते हैं? क्या आपने सुनिश्चित किया है कि आप फ़्लैश प्लेयर 10 का उपयोग कर रहे हैं? (ऐसा लगता है कि मेरे निष्कर्ष यह थे कि फ़्लैश प्लेयर 9 कस्टम प्राधिकरण शीर्षलेखों के साथ अच्छा नहीं खेलता है।) –
आपकी मदद के लिए धन्यवाद ईसाई - दुर्भाग्य से, मुझे आगे परीक्षण करने का मौका नहीं मिला है (किसी अन्य प्रोजेक्ट के साथ घिरा हुआ है) लेकिन मैं एक कोशिश करूँगा मुझे अवसर मिल जाएगा। – BrynJ