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