我是新来的,我真的需要帮助。 在Flash项目上工作,我遇到了一个问题。我想要做的是让用户选择具有受限文件扩展名的文件,如* .png,* jpg。选择文件后,flash会在左角显示图片的一些缩略图,并将文件参考推送到新阵列,这样当点击上传按钮时,文件就会上传。项目文件为here。缩略图的排列并不是我想要的,但不是问题。
问题是当文件被选中时,gofurther会绘制缩略图,但是一旦我点击upload_btn bytesAr函数再次被调用并绘制所有选中的图像。您可以查看单击按钮之前和之后的行为here。
给我这个问题的部分是:
function uplFile(e:Event):void
{
for (var i:Number=0; i<fileUp.length; i++)
{
fileUp[i].upload(loaDur);// this line
}
}
如果我评论上传循环文件的循环内线,那么一切都很好,但如果我离开它会调用bytesar函数,即使我给该函数的参数,也会从fileUp数据中重新绘制缩略图是file:filereferenceList,而且uplFile函数中没有bytesarr函数引用,那么如何调用它?有人可以帮忙吗?感谢
public class uplClass extends MovieClip
{
var filter:Array = new Array(new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg; *.jpeg; *.gif; *.png"));
var loaDur:URLRequest = new URLRequest(( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : './upload.php');
var file:FileReferenceList;
var fileUp:Array = new Array();
var numb:Number = 0;
var track:Number = 0;
var loadeR:Loader;
var bitmap:Bitmap;
public function uplClass()
{
file = new FileReferenceList();
setup(file);
select_btn.addEventListener(MouseEvent.CLICK, browse);
//cancel_btn.addEventListener(MouseEvent.CLICK, cancel_func);
upload_btn.addEventListener(MouseEvent.CLICK, uplFile);
cancel_btn.visible = false;
upload_btn.visible = false;
}
public function browse(e:MouseEvent)
{
file.browse(filter);
}
private function setup(file:FileReferenceList)
{
file.addEventListener(Event.SELECT, select_func);
}
private function error_func( e:IOErrorEvent )
{
var tf = new TextFormat();
tf.color = 0xff0000;
label_txt.defaultTextFormat = tf;
label_txt.text = 'The file could not be uploaded.';
cancel_btn.visible = false;
select_btn.visible = true;
}
private function select_func( e:Event )
{
for each (var fileRef:FileReference in file.fileList)
{
fileUp.push(fileRef);
fileRef.load();
fileRef.addEventListener(Event.COMPLETE, bytesAr);
}
function bytesAr(e:Event):void
{
loadeR = new Loader();
loadeR.loadBytes(e.target.data);
loadeR.contentLoaderInfo.addEventListener(Event.COMPLETE, gofurther);
//track++;
//count_txt.text=file.toString()+"1 "+fileUp.toString()+" "+numb;
//trace(file+"1 "+fileUp);
}
}
function gofurther(e:Event):void
{
bitmap = e.target.content;
bitmap.scaleX = 0.2;
var thumbLoad:Sprite = new Sprite ;
thumbLoad.graphics.beginBitmapFill(bitmap.bitmapData,null,false,true);
thumbLoad.graphics.drawRect(0,0,30,30);
thumbLoad.graphics.endFill();
thumbLoad.x = 100 * numb;
addChild(thumbLoad);
numb++;
//count_txt.appendText(numb+" ");
if (upload_btn.visible == false)
{
upload_btn.visible = true;
}
}
function uplFile(e:Event):void
{
for (var i:Number=0; i<fileUp.length; i++)
{
fileUp[i].upload(loaDur);// if i comment this line everything is fine, but if i leave it like this it calls bytesAr function somehow
}
}
}
}
用于移动上传文件的PHP代码:
$ uploads_dir =&#39; ./ uploads /&#39;;
if($ _FILES [&#39; Filedata&#39;] [&#39; error&#39;] == 0){if(move_uploaded_file( $ _FILES [&#39; Filedata上&#39;] [&#39; tmp_name的值&#39], $ uploads_dir。$ _ FILES [&#39; Filedata&#39;] [&#39; name&#39;])){echo&#39; ok&#39;出口(); 回声&#39;错误&#39 ;;出口();
答案 0 :(得分:0)
fileUp.push(fileRef);
fileRef.load();
fileRef.addEventListener(Event.COMPLETE, bytesAr); // <- see this? where are you removing it?
现在查看upload()
的{{1}}:
complete:Event - 在文件上载操作成功完成时调度。
您实际上是在上传完成后触发相同的侦听器。希望它有所帮助。