PDA

Просмотр полной версии : Множественная загрузка. URLLoader и SecurityError #2176


olexandr
17.01.2012, 03:27
Всем привет.

Банальная проблема, которая возникала у многих, но решения в Google и на нашем форуме не нашел.
Может быть, кто-то знает решение проблемы или предложит другой вариант реализации.

Имеется загрузчик фотографий. Загружаем, обрабатываем и отправляем. Первая фотка уходит нормально, поскольку отправляется в следствии MouseEvent'а. А вот со второй фоткой начинаются проблемы:
SecurityError: Error #2176: Certain actions, such as those that display a pop-up window, may only be invoked upon user interaction, for example by a mouse click or button press.

Код, в общем-то, банальный:
var _name:String = _names[_iterator];
var _bytes:ByteArray = _bytes[_iterator] as ByteArray;

var _vars:URLVariables = new URLVariables();
_vars[...] = ...;

var _request:URLRequest = new URLRequest(Config.URL_UPLOAD);
_request.method = URLRequestMethod.POST;
_request.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
_request.data = UploadPostHelper.getPostData(_name, _bytes, _vars);
_request.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache'));

_loader.load(_request);

Есть решение моей проблемы или нет? Подозреваю, что нет.
Тогда возникает другой вопрос - может быть имеет смысл отправлять все за одну итерацию?
Объединить все ByteArray в один? Или может быть, можно отправить массив ByteArray'ев?

i.o.
17.01.2012, 13:31
http://stackoverflow.com/questions/1270347/unexpected-flash-security-exception-when-using-urlloader

olexandr
17.01.2012, 15:16
Я видел этот пример, но не разобрался. Что конкретно мне отуда нужно взять?

и new URLRequestHeader('Content-type', 'multipart/form-data');
, и new URLRequestHeader('Content-type', 'application/octet-stream');
я пробовал добавлять к своему методу. Это не помогло...

i.o.
17.01.2012, 16:26
It could be possible that contentType does not refer to what data you send, but to what data you receive. Try to set the requestHeaders, that should work:
urlRequest.requestHeaders.push(new URLRequestHeader('Content-type', 'multipart/form-data'));

Другими словам, не трогайте _request.contentType

olexandr
18.01.2012, 14:37
вроде все заработало. спасибо!

окончательный вариант:
var _request:URLRequest = new URLRequest(Config.URL_UPLOAD);
_request.method = URLRequestMethod.POST;
_request.data = UploadPostHelper.getPostData(_name, _bytes, _vars);
_request.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache'));
_request.requestHeaders.push(new URLRequestHeader('Content-type', 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary()));


+ были проблемы с crossdomain.xml. в итоге, как нагуглил на одном из сайтов посоветовали воспользоваться этим кроссдомейном (http://api.myspace.com/crossdomain.xml).