FileReference:在客户端和服务器之间添加上载和下载文件的功能,位于flash.net包内
FileReferenceList: 实现多文件上传,位于flash.net包内.
相关方法有:
- browse: 打开对话窗口,供用户选择文件
- upload: 上传
- download: 下载
- cancel: 取消上传或下载
常用事件有:
- Event.SELECT:选择文件后调度
- ProgressEvent.PROGRESS :传输中调度
- Event.COMPLETE :当下载操作完成或上载操作生成 HTTP 状态代码 200 时调度。
- DataEvent.UPLOAD_COMPLETE_DATA :成功上载并从服务器接收数据之后调度
- Event.CANCEL:取消上传或下载时调度
- IOErrorEvent.IO_ERROR:上传下载失败时调度
辅助类:flash.net.FileFilter,文件过滤器
var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png");
var textTypes:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", "*.txt; *.rtf");
var allTypes:Array = new Array(imageTypes, textTypes);
var fileRef:FileReference = new FileReference();
fileRef.browse(allTypes);
示例(手册上有):
1)单文件上传
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
var success:Boolean = fileRef.browse();
function selectHandler(event:Event):void
{
var request:URLRequest = new URLRequest("fileUploadScript.php")
fileRef.upload(request);
}
function completeHandler(event:Event):void
{
trace("uploaded");
}
2.多文件上传
var fileRefList:FileReferenceList = new FileReferenceList();
fileRefList.addEventListener(Event.SELECT, selectHandler);
fileRefList.browse();
function selectHandler(event:Event):void
{
var request:URLRequest = new URLRequest("fileUploadScript.php");
var file:FileReference;
var files:FileReferenceList = FileReferenceList(event.target);
var selectedFileArray:Array = files.fileList;
for (var i:uint = 0; i < selectedFileArray.length; i++)
{
file = FileReference(selectedFileArray[i]);
file.addEventListener(Event.COMPLETE, completeHandler);
file.upload(request);
}
}
function completeHandler(event:Event):void
{
trace("uploaded");
}
可以看出,单多文件上传,除了用的类不一样外,多文件上传只是遍历FileReferenceList的fileList属性,该属性是一个包括FileReference的数组,每个遍历调用upload,从而实现多文件上传。
后台处理程序,同样来至手册:
<?php
$MAXIMUM_FILESIZE = 1024 * 200; // 200KB
$MAXIMUM_FILE_COUNT = 10; // keep maximum 10 files on server
echo exif_imagetype($_FILES['Filedata']);
if ($_FILES['Filedata']['size'] <= $MAXIMUM_FILESIZE)
{
move_uploaded_file($_FILES['Filedata']['tmp_name'], "./temporary/".$_FILES['Filedata']['name']);
$type = exif_imagetype("./temporary/".$_FILES['Filedata']['name']);
if ($type == 1 || $type == 2 || $type == 3)
{
rename("./temporary/".$_FILES['Filedata']['name'], "./images/".$_FILES['Filedata']['name']);
}
else
{
unlink("./temporary/".$_FILES['Filedata']['name']);
}
}
$directory = opendir('./images/');
$files = array();
while ($file = readdir($directory))
{
array_push($files, array('./images/'.$file, filectime('./images/'.$file)));
}
usort($files, sorter);
if (count($files) > $MAXIMUM_FILE_COUNT)
{
$files_to_delete = array_splice($files, 0, count($files) - $MAXIMUM_FILE_COUNT);
for ($i = 0; $i < count($files_to_delete); $i++)
{
unlink($files_to_delete[$i][0]);
}
}
print_r($files);
closedir($directory);
function sorter($a, $b)
{
if ($a[1] == $b[1])
{
return 0;
}
else
{
return ($a[1] < $b[1]) ? -1 : 1;
}
}
?>