[flex] فليكس 3 - كيفية دعم مصادقة هتب أورلركست؟



Answers

لا تدعم أساليب FileReference.upload () و FileReference.download () المعلمة URLRequest.requestHeaders.

http://livedocs.adobe.com/flex/2/langref/flash/net/URLRequest.html

Question

لدي ملف نصي لتحميل ملف فليكس يستخدم أورلركست لتحميل الملفات إلى خادم. أريد أن أضيف الدعم لمصادقة هتب (الدلائل المحمية بكلمة مرور على الخادم)، ولكن لا أعرف كيفية تنفيذ هذا - أفترض أنني بحاجة إلى تمديد الطبقة بطريقة أو بأخرى، ولكن على كيفية أنا قليلا فقدت.

حاولت تعديل ما يلي (استبدال هتبسرفيس مع ورلركست)، ولكن هذا لم ينجح.

private function authAndSend(service:HTTPService):void{        
   var encoder:Base64Encoder = new Base64Encoder();        
   encoder.encode("someusername:somepassword");        
   service.headers = {Authorization:"Basic " + encoder.toString()};
   service.send();
}

أود أن أشير إلى أنني لست على دراية عندما يتعلق الأمر أكتيونسكريبت / فليكس، على الرغم من أنني تمكنت من تعديل بنجاح تحميل البرنامج النصي إلى حد ما.

[تحرير] - هنا هو تحديث التقدم المحرز بلدي، استنادا إلى الجواب أدناه، على الرغم من أنني ما زلت لا يمكن الحصول على هذا العمل:

شكرا لمساعدتك. لقد حاولت تنفيذ التعليمات البرمجية ولكن لم يكن لدي أي حظ.

السلوك العام الذي أتعرض له عند التعامل مع مواقع هتب المصادقة هو أنه مع IE7 كل شيء بشكل جيد ولكن في فايرفوكس عندما أحاول تحميل ملف إلى الخادم فإنه يعرض مطالبة مصادقة هتب - التي حتى لو أعطيت التفاصيل الصحيحة، ببساطة الأكشاك عملية التحميل.

وأعتقد أن السبب 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 موجودا - حيث لا يوجد لدي حاليا أحد وأنا غير متأكد من مكان وضعه.










تم حل مشكلة مماثلة على ما يبدو هنا . وأحثكم أيضا على التحقق من وظيفة فليكسكوديرس المرتبطة في أول وظيفة.

وكانت المشكلة أن فايرفوكس يستخدم مثيل نافذة متصفح منفصلة لإرسال طلب تحميل الملف. الحل هو إرفاق معرف الجلسة يدويا إلى عنوان ورل للطلب. لا يتم إرفاق معرف جلسة كمتغير جيت العادية، ولكن مع فاصلة منقوطة (السبب في هذه البنية غير معروف بالنسبة لي).




Related