PDA

Просмотр полной версии : PHP as3 индикация загрузки файла


Artic
13.11.2009, 17:46
собственно такой вот вопрос
загружаю файл через FileReference.data
то есть отсылаю data в PHP

и как бы повесить на это индикатор загрузки ?

код
var request:URLRequest = new URLRequest(
"upload.php?name="+ID+file.name+"&folder="+_pathToPhotoOnServer+"&d="+new Date().getTime());
request.data = file.data;
request.method = URLRequestMethod.POST;
urlLoader.addEventListener(Event.COMPLETE, onServerAnswerGetMenu);
request.contentType = 'application/octet-stream';
urlLoader.load(request);

<?php

$fileData = $GLOBALS[HTTP_RAW_POST_DATA];
mkdir($_GET['folder']);
$fileName = ''.$_GET['folder'].'/'.$_GET['name'].'';
$fp = fopen($fileName, "w");
fwrite($fp,$fileData);
fclose($fp);
echo "file write - OK ".$fileName;
?>

gloomyBrain
13.11.2009, 17:51
Может быть так:

addEventListener(ProgressEvent.PROGRESS, updateMyLoader)
?

Artic
13.11.2009, 18:08
нее
1 грузит PHP скрипт а не flash
2 пробовал PROGRESS не срабатывает ^^

gloomyBrain
13.11.2009, 18:59
1 - и так понятно =)
2 - должен срабатывать, по крайней мере об этом сказано в help'е (http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/FileReference.html)

+ из того же help'а:

- Content-Type со значением multipart/form-data
- Content-Disposition, у которого атрибут name имеет по умолчанию значение Filedata, а атрибут filename указывает имя исходного файла.
- Двоичное содержимое файла

kackbip
13.11.2009, 19:20
gloomyBrain, URLLoader не диспатчит событие ProgressEvent.PROGRESS, это событие срабатывает при FileReference.upload, но автор не пользуется этим методом, видимо, по причине того, что он модифицирует файл перед отправкой.

Это чтобы брожение остановить. А по теме - не знаю как

gloomyBrain
13.11.2009, 19:49
загружаю файл через FileReference.data
то есть отсылаю data в PHP
- вот это я увидел

urlLoader.addEventListener(Event.COMPLETE, onServerAnswerGetMenu);
- а вот это упустил...
Отсюда и брожения

по причине того, что он модифицирует файл перед отправкой
а какая разница?

Artic
13.11.2009, 22:48
эмммм то есть через FileReference.upload можно без PHP скрипта аплодить файлы ? или как ? я все то что нашел про загрузку файлов на сервер то и использую

gloomyBrain
13.11.2009, 23:25
Со скриптом, конечно
Просто видно будет сколько отправлено

Artic
13.11.2009, 23:46
простой пример можете написать ?

kackbip
14.11.2009, 08:47
gloomyBrain, Никто не догнал чего автор хочет :) Ну щас расскажем


fileReference.addEventListener(ProgressEvent.PROGRESS, onProgress);
fileReference.upload(urlRequest);
function onProgress(evt:ProgressEvent):void{
evt.bytesTotal;
evt.bytesLoaded;
}


Данный подход будет работать, если вам нужно выбрать файл на локальной машине и отправить его на сервер без модификация. Если же вы загружаете файл во флэшку (FileReference.load), модифицируете его FileReference.data и потом хотите отправить на сервер, то тут придется исрользовать URLLoader

Felicast
14.11.2009, 11:30
извините, мне не приходилось работать с загрузкой (upload) файлов на сервер. но логическое мышление подсказывает мне, что evt.bytesLoaded; будет отображать загруженные (loaded) данные, то есть ответ от сервера (в данном случае echo "file write - OK ".$fileName;)

если я ошибаюсь поправьте меня пожалуйста.

kackbip
14.11.2009, 11:46
Свойста bytesLoaded и bytesTotal события ProgressEvent.PROGRESS, генерируемого FileReference-ом при upload-е, говорят именно о прогрессе аплоада.
evt.bytesLoaded; будет отображать загруженные (loaded)
свойство bytesLoaded не уточняет били ли данные UPloaded или DOWNloaded, так что логика вроде нигде не нарушается :)
ПС: говорю из собственного опыта. Так все и есть :)

Artic
14.11.2009, 14:00
так все это конечно замечательно ! а что в скрипте то должно быть ? оО или флашь сам отправляет файл на стервер

Felicast
14.11.2009, 16:26
стервер
опечатка по фрейду:)

kackbip
14.11.2009, 17:59
а что в скрипте то должно быть ?
А в начале темы вроде что-то похожее на правду было написано. Никаких примочек от сервера для определения прогресса аплоада не нужно.

Artic
14.11.2009, 18:55
опечатка по фрейду
не так и задуманно ))))

А в начале темы вроде что-то похожее на правду было написано. Никаких примочек от сервера для определения прогресса аплоада не нужно.
блин ! совсем не понимаю ! куда при FileReference.upload сувать URLRequest ??? может кто то накидать пример не большой ?

kackbip
14.11.2009, 19:31
URLRequest сувать в FileReference.upload
Ну в хелпе ведь все доступно объясняется. Смотрите внимательнее. Даже на русском есть хелп...
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/FileReference.html#upload()

Artic
14.11.2009, 20:02
Данные FileReference POST не могут иметь тип ByteArray.
собственно получаю ошибку

делал так

var request:URLRequest = new URLRequest(
"upload.php?name="+ID+file.name+"&folder="+_pathToPhotoOnServer+"&d="+new Date().getTime());
request.data = file.data;
file.upload(request);


собсно как правильно нада ?