我试图创建一个多图像上传(认为Coppermine),其中用户点击一个SWF按钮,选择一个文件或多个文件,然后这些文件上传到一个目录。多个图像上传不工作
我有一个处理上传文件的PHP脚本,我的Flash文件迭代FileReferenceList
中的文件并将文件发送到此PHP脚本上传。在PHP脚本的目录路径是正确的,权限设置为777。
我的ActionScript 3.0类看起来像这样的内容:
package com.yourfightsite.imageupload {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.external.ExternalInterface;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.FileReferenceList;
import flash.net.URLRequest;
public class ImageUpload extends MovieClip {
private var uploadURL:URLRequest;
private var fileRef:FileReferenceList;
public function ImageUpload():void {
uploadURL = new URLRequest();
uploadURL.url = stage.loaderInfo.parameters.uploadUrl;
fileRef = new FileReferenceList();
uploadButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
}
private function buttonClickHandler(e:MouseEvent):void {
var imageFilter:FileFilter = new FileFilter('Images', '*.jpg');
fileRef.browse(new Array(imageFilter));
fileRef.addEventListener(Event.SELECT, fileSelectHandler);
}
private function fileSelectHandler(e:Event):void {
for each(var fileToUpload:FileReference in fileRef.fileList) {
addFileToQueue(fileToUpload.name);
uploadSingleFile(fileToUpload);
}
}
private function uploadSingleFile(file:FileReference):void {
file.upload(uploadURL);
file.addEventListener(Event.COMPLETE, completeHandler);
}
private function ioErrorHandler(e:IOErrorEvent):void {
trace('ioErrorHandler: ' + e);
ExternalInterface.call('console.error', e);
}
private function progressHandler(e:ProgressEvent):void {
var fileRef:FileReference = FileReference(e.target);
var percentUploaded:Number = Math.round((e.bytesLoaded/e.bytesTotal)*100);
updateFileInQueue(e.target.name, percentUploaded);
}
private function completeHandler(e:Event):void {
markFileInQueueAsComplete(e.target.name);
}
private function addFileToQueue(filename:String):void {
ExternalInterface.call('addFileToQueue', filename);
}
private function updateFileInQueue(filename:String, percent:Number):void {
ExternalInterface.call('updateFileInQueue', filename, percent);
}
private function markFileInQueueAsComplete(filename:String):void {
ExternalInterface.call('markFileInQueueAsComplete', filename);
}
}
}
在火类的JavaScript函数底部的三种方法在我的HTML页面中,将文件名添加到文件队列小部件,并更新它们旁边的百分比值,最后将它们标记为完整。
但是,当我选择文件时,它们按预期方式被添加到文件队列小部件,然后什么也不是。文件未上传,文件队列小部件中的文件不会更新,并且在发布我的电影时不会在控制台(我使用Chrome)或Flash中抛出错误。
任何人都可以看到我上面的ActionScript中的任何错误?
它能做什么?你有没有尝试在你的动作脚本中放置简单的TRACE(“HERE(fn name)”)来查看哪些函数正在发射以及按照什么顺序?另外 - 为什么你去Flash - > Java脚本 - > PHP?为什么不跳过JavaScript? – ethrbunny 2012-01-01 22:22:31
我不是Flash程序员,我的主要熟练程度是PHP,所以上述课程通过各种网站和书籍作为参考/资源进行组合。 – 2012-01-02 13:48:34