У меня есть сценарий загрузки файлов Flex, который использует URLRequest для загрузки файлов на сервер. Я хочу добавить поддержку HTTP-аутентификации (защищенные паролем каталоги на сервере), но я не знаю, как это реализовать - я предполагаю, что мне нужно как-то расширить класс, но о том, как я немного потерялся.Flex 3 - как поддерживать HTTP-аутентификацию URLRequest?
Я попытался изменить следующее (заменив HTTPService на URLRequest), но это не сработало.
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
Я должен отметить, что я не осведомлен, когда речь идет о ActionScript/Flex, хотя мне удалось успешно изменить сценарий загрузки несколько.
[Редактировать] - вот это обновление моего прогресса, на основе ниже ответ, хотя я до сих пор не могу получить эту работу:
Спасибо за вашу помощь. Я пытался реализовать свой код, но мне не повезло.
Общее поведение, которое я испытываю при работе с проверенными HTTP-точками, заключается в том, что с IE7 все хорошо, но в Firefox, когда я пытаюсь загрузить файл на сервер, он отображает запрос проверки подлинности HTTP, который даже если он задан правильно детали, просто останавливает процесс загрузки.
Я считаю, что причина, по которой IE7 в порядке, сводится к тому, что информация о сеансе/аутентификации совместно используется браузером и компонентом Flash, однако в Firefox это не так, и я испытываю вышеуказанное поведение.
Вот мой обновленный функция загрузки, включая изменения:
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, расположены в D: \ websites \ yoursite.com, путь файла должен быть d: \ websites \ yoursite.com \ crossdomain.xml. –
В дополнение к размещению файла corssdomain.xml (что вам нужно сделать), знаете ли вы, какая версия проигрывателя Flash вы установили? Вы уверены, что используете Flash Player 10? (Похоже, мои выводы были в том, что Flash Player 9 не играет хорошо с пользовательскими заголовками авторизации.) –
Благодарим за помощь. Кристиан - к сожалению, у меня не было возможности пройти дополнительные испытания (были завалены другим проектом) но я попробую один, я получаю эту возможность. – BrynJ