Я пытаюсь создать загрузчик нескольких изображений (например, 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 выше?