У меня есть скрипт загрузки файлов Flex, который использует URLRequest для загрузки файлов на сервер. Я хочу добавить поддержку http-аутентификации (каталоги, защищенные паролем на сервере), но я не знаю, как это реализовать - я предполагаю, что мне нужно как-то расширить класс, но я немного растерялся.
Я попытался изменить следующее (замена 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, хотя мне удалось несколько изменить сценарий загрузки.
[Edit] - вот обновление моего прогресса, основанное на ответе ниже, хотя я все еще не могу заставить это работать:
Спасибо за вашу помощь. Я пытался реализовать твой код, но мне не повезло.
Общее поведение, с которым я сталкиваюсь при работе с аутентифицированными местоположениями 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 - поскольку у меня его нет, и я не уверен, где его разместить.