Flex hack для аутентифицированной загрузки файла - PullRequest
2 голосов
/ 27 октября 2011

Кто-нибудь знает взломать загрузку файлов для Flex, который позволит загружать файлы в аутентифицированные веб-сервисы через многочастную форму? В этом отчете об ошибке с сайта Adobe пользователь сообщает:

Flash не совместим с разными браузерами, если эта функция работает только через Javascript взломает

Пока что я не смог создать такой взлом. Я не уверен, что делать дальше. Вот что я пробовал до сих пор (все были неудачны или невозможны)

1 Ответ

1 голос
/ 01 ноября 2011

В конечном итоге это то, что сработало для меня.Я изменил свой веб-сервис, чтобы принимать поток байтов вместо составного файла.Затем я использовал URLLoader для загрузки байтов в сервис.

private var fileReference:FileReference;

public function loadFile()
{
   fileReference.addEventListener(Event.COMPLETE, fileLoaded);
   fileReference.load();
}

private function fileLoaded(evt:Event):void{
   fileReference.removeEventListener(Event.COMPLETE, fileLoaded);
   startUpload();
}

public function startUpload():void {

   var xml:String = // xml to post along with the file ;
   var url:String = // url to the web service

   var bytes:ByteArray = new ByteArray();
   bytes.writeUTFBytes(fileReference.name);
   bytes.writeUTFBytes(xml);
   bytes.writeBytes(fileReference.data);
   bytes.position = 0;

   var urlLoader:URLLoader = new URLLoader();
   var request:URLRequest = new URLRequest(url);
   request.data = bytes;
   request.method = URLRequestMethod.POST
   request.contentType = "application/octet-stream";
   urlLoader.addEventListener(Event.COMPLETE, uploadComplete);
   urlLoader.addEventListener(flash.events.IOErrorEvent.IO_ERROR, uploadError);
   urlLoader.load(request);
}

private function uploadComplete(e:Event):void {
   // handle success
}

private function uploadError(e:Event):void {
   // handle failure
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...