
Код AS3:
package com {
import flash.utils.*;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
import fl.controls.ProgressBar;
import fl.controls.ProgressBarMode;
import flash.external.ExternalInterface;
public class MainClass extends Sprite {
private var error:TextField = new TextField();
private var myFormat:TextFormat;
private var browseButt:MovieClip;
private var uploadButt:MovieClip;
private var deleteButt:MovieClip;
private var db:MovieClip;
private var pb:ProgressBar = new ProgressBar();
private var fileTypes:Object = new Object();
private var fr:FileReference = new FileReference();
private var maxFileSize:Number;
private var myFlashVars;
private var url;
private var session:String;
private var id;
private var type;
private var fileFilter;
private var request:URLRequest;
public function MainClass() {
// определяем входящие переменные
myFlashVars = stage.loaderInfo.parameters; // приём внешних параметров
maxFileSize = myFlashVars.size ? myFlashVars.size : 300;
url = myFlashVars.url ? myFlashVars.url : 'http://upload/singleUploader/upload.php';
fileFilter = myFlashVars.fileFilter ? new FileFilter(myFlashVars.fileFilterTitle, myFlashVars.fileFilter) : new FileFilter("Все файлы", "*.*");
type = myFlashVars.type ? myFlashVars.type : null;
id = myFlashVars.id ? myFlashVars.id : 0;
session = myFlashVars.session ? myFlashVars.session : null;
// формат для текста
myFormat = new TextFormat();
myFormat.font="Verdana";
myFormat.color = 0x990000;
myFormat.size = 12;
// добавляем textField
error.width=410;
error.height=20;
error.x=50;
error.y=45;
error.setTextFormat(myFormat);
addChild(error);
// добавляем кнопки
browseButt = new (getDefinitionByName("ub"));
browseButt.x=50;
browseButt.y=20;
browseButt.addEventListener(MouseEvent.CLICK, browseFiles);
addChild(browseButt);
// добавляем progressBar
pb.mode = ProgressBarMode.MANUAL;
pb.setSize(280, 4);
pb.move(10, 30);
pb.visible = false;
addChild(pb);
//url + id + "/" + type
// составляем запрос
request = new URLRequest(url);
request.method = URLRequestMethod.POST;
var variables:URLVariables = new URLVariables();
variables.id = id;
variables.type = type;
variables.session = session;
request.data = variables;
fr.addEventListener(Event.SELECT, selectHandler);
}
// функция при выборе файлов
private function browseFiles(event:MouseEvent):void {
fr.browse(new Array(fileFilter));
}
// функция, когда файлы выбраны
private function selectHandler(event:Event):void {
if(maxFileSize < round(fr.size/1024)) { // если размер больше
error.htmlText = "Файл не может превышать <b>" + maxFileSize + "MB</b>";
error.setTextFormat(myFormat);
return;
}
browseButt.removeEventListener(MouseEvent.CLICK, browseFiles);
browseButt.addEventListener(MouseEvent.CLICK, startUpload);
}
private function startUpload(event:MouseEvent):void {
browseButt.visible = false;
pb.setProgress(0, 100);
pb.visible = true;
fr.addEventListener(ProgressEvent.PROGRESS, progressHandlerFile)
fr.addEventListener(Event.COMPLETE, completeHandlerFile);
fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandlerFile);
fr.upload(request);
}
// функция прогресса отправки файла
private function progressHandlerFile(event:ProgressEvent):void {
var percentLoadeds = int(Math.round(event.bytesLoaded/event.bytesTotal*100));
error.htmlText='Файл загружен на <b>' + percentLoadeds + '</b>%';
error.setTextFormat(myFormat);
pb.setProgress(event.bytesLoaded, event.bytesTotal);
}
// функция конца отправки файла
private function completeHandlerFile(event:Event):void {
pb.visible = false;
error.htmlText='Файл успешно загружен';
error.setTextFormat(myFormat);
}
// функция округления до мегабайт
private function round(number:Number, pow:Number = 0):Number {
number=number/1024;
var kof = Math.pow(10, pow);
return Math.ceil(number*kof)/kof;
}
// функция передачи данных в js
private function uploadCompleteHandlerFile(event:DataEvent):void {
ExternalInterface.call("receiveFromFlash3", event.data);
}
}
}
Собствено небольшой класс
он работает если запускать из флеш
но если из браузреа пишет: SecurityError: Error #2000: Отсутствует активный контекст безопасности.
Потом переделал повесил события выгрузки на кнопку, все ранво так же ошибка, скажите в чем может быть проблема?