使用flash上传器和php进行文件的多重上传,并保存到mysql数据库中


Multiupload of files using flash uploader and php and saving into mysql database

我想开发一个后端管理解决方案,使用一些多上传闪存上传器为帖子保存图像。我指的是那种上传器,当你点击浏览,然后在打开的对话框中,你可以使用CTRL加鼠标左键选择多个文件)。

我想将每个新图像保存到数据库中。对于保存,我的意思是,为表中的每个项目(图像)创建一个新行,称为images:

1.id (automatically increasing)
2.file_name
3.user_who_uploaded_that_book

我还想限制用户在配置文件中某个位置可以上传的文件数量(例如,最多20个文件)。

就我个人而言,我是Plupload的粉丝,其中包括一组关于如何设置它以上传多个文件的示例。它还包括一个upload.php脚本,作为后端设置的示例。

HTML4不支持多选文件,因此您需要依赖HTML5或扩展(如flash或silverlight)。Plupload支持以上所有功能,因此它应该可以为您节省一些跑腿工作。

我想这里有两个基本问题:

  1. 如何选择本地文件通过flash上传
  2. 如何将多个文件作为POST发送到服务器

对于#1,您需要使用flash.net.FileReference.

对于#2,flash中没有内置的"Multipart"加载程序,我确信这正是您所需要的。我发现的最好的是一位名叫Eugene的天才开发人员:http://blog.inspirit.ru/?p=198.这很好,尽管我个人在IE8&IE9.我确信这是IE的错,而不是尤金的错。我在听HTTPStatusEvent事件时就这样做了:

var ml:MultipartURLLoader = new MultipartURLLoader();           
ml.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatusEvent);
ml.addVariable('Content-Type', "image/png");
ml.addFile(pngStream, filename, "file", "image/png");
ml.load('http://...');
function onHTTPStatusEvent( event: HTTPStatusEvent ){           
    if(stat == 0 || (stat >= 200 && stat < 205)){
        //upload success
    }else{
        //some kinda error
    }
}

(这应该适用于多个addFiles(_);)

我也在听标准事件:

ml.addEventListener(Event.COMPLETE, uploadComplete);
ml.addEventListener(ProgressEvent.PROGRESS, uploadProgress);

但我根本没能让PROGRESS发挥作用,COMPLETE也没有在IE上启动……有人知道在IE上有什么替代方案吗?Eugene的代码现在对我有效,但我不认为我可以添加一个"上传…"进度条,这会很酷。