Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   удаление файла через php после загрузки во флеш (http://www.flasher.ru/forum/showthread.php?t=171979)

lopster 29.11.2011 02:31

удаление файла через php после загрузки во флеш
 
Откопипастив откуда только можно сделал код, при помощи которого на сервер грузится картинка, после чего она загружается во флеш. В следствии ненадобности ее на самом сервере, ее необходимо удалить, однако куда вписать код file.upload("del.php") или как его вписать грамотно чтобы он работал в функции lst.onLoadInit = function(tgt:MovieClip) я так и не понял, вот сам код
Код AS1/AS2:

System.security.allowDomain("http://localhost/");
import flash.net.FileReference;
 
 
var listener:Object = new Object();
var fileRef:FileReference = new FileReference();
fileRef.addListener(listener);
 
var loader:MovieClipLoader = new MovieClipLoader();
var lst:Object = new Object();
loader.addListener(lst);
//var cnt:MovieClip = _root.createEmptyMovieClip('container', 0);
cnt._visible = false;//чтобы не мелькал
 
lst.onLoadInit = function(tgt:MovieClip)
{
//file.upload("del.php");
        output = tgt._width + " " + tgt._height;
        //загрузка картинки завершена
        if ((tgt._width > (850 - 150)) || (tgt._height > 450))
        {
                var xscale:Number = ((850 - 150) / tgt._width);
                var yscale:Number = (450 / tgt._height);
                trace(xscale * tgt._width + " " + yscale * tgt._height);
                if (xscale < yscale)
                {
                        //tgt._xscale = tgt._yscale = xscale;
                        tgt._width = xscale * tgt._width;
                        tgt._height = xscale * tgt._height;
                }
                else
                {
                        //tgt._xscale = tgt._yscale = yscale;
                        tgt._width = yscale * tgt._width;
                        tgt._height = yscale * tgt._height;
                }
        }
        // center bitmap                                                       
        tgt._x = 150 + Math.abs(tgt._width - (850 - 150)) / 2;
        tgt._y = Math.abs(tgt._height - 450) / 2;
 
};
 
 
listener.onSelect = function(file:FileReference):Void
{
        //trace("onSelect: " + file.name);
        file.upload("code.php");
        output = "Select: " + file.name;
 
};
 
listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void
{
        output = Math.floor((bytesLoaded / bytesTotal) * 100) + "%";
};
 
listener.onComplete = function(file:FileReference):Void
{
        output = "Complete: " + file.name;
        var cnt:MovieClip = _root.createEmptyMovieClip('container', 0);
        loader.loadClip(file.name,cnt);
        //file.upload("del.php");
};
 
 
 
but1.onPress = function()
{
        cnt.unloadMovie();
        fileRef.browse([{description:"Image Files", extension:"*.jpg;*.gif;*.png"}]);
};

вписывал в функцию listener.onComplete = function(file:FileReference):Void после загрузки картинки, однако загрузка не свегда успевает пройти и картинка не загружается, так что надо вписать в функцию lst.onLoadInit = function(tgt:MovieClip), но так просто не работает...
еще вопрос как загружать файлы с названием на русском или как их не загружать(чтобы php не копировал их на сервер)

PHP код:

code.php
<?php
move_uploaded_file
($_FILES['Filedata']['tmp_name'], "./".$_FILES['Filedata']['name']);
?>

del.php
<?php
unlink
("./".$_FILES['Filedata']['name']);
?>


mooncar 29.11.2011 10:56

Цитата:

Сообщение от lopster (Сообщение 1048788)
куда вписать код file.upload("del.php")

В любое место в onLoadInit. Картинка же уже загружена, так? Об этом нам как раз и сообщает onLoadInit. Всё, что выполняется внутри него, относится к уже загруженному содержанию, поэтому картинку с сервера можно удалять.
Цитата:

Сообщение от lopster (Сообщение 1048788)
еще вопрос как загружать файлы с названием на русском или как их не загружать(чтобы php не копировал их на сервер)

Так же как и на всех других языках. Просто после загрузки в move_uploaded_file задайте файлу любое имя, например temp.jpg, а не извлекайте родное из $_FILES. Ведь файл подлежит скорому удалению - не все ли равно как он будет называться на сервере?
Только надо будет учесть это в loadClip.

lopster 29.11.2011 11:42

Цитата:

Сообщение от mooncar (Сообщение 1048805)
В любое место в onLoadInit. Картинка же уже загружена, так? Об этом нам как раз и сообщает onLoadInit. Всё, что выполняется внутри него, относится к уже загруженному содержанию, поэтому картинку с сервера можно удалять.

писал так
Код AS1/AS2:

...
lst.onLoadInit = function(tgt:MovieClip)
{
          file.upload("del.php");
        output = tgt._width + " " + tgt._height;
        //загрузка картинки завершена
        if ((tgt._width > (850 - 150)) || (tgt._height > 450))
        {
...

не работает, может это както связано с листнером или с file:FileReference?

Цитата:

Сообщение от mooncar (Сообщение 1048805)
Так же как и на всех других языках. Просто после загрузки в move_uploaded_file задайте файлу любое имя, например temp.jpg, а не извлекайте родное из $_FILES. Ведь файл подлежит скорому удалению - не все ли равно как он будет называться на сервере?

ну а если в конкретный момент загрузит файл не 1 человек,а много => у многих будет ошибка, у кого то загрузит не их файл,а чей-то еще

mooncar 29.11.2011 14:27

Цитата:

Сообщение от lopster (Сообщение 1048809)
писал так
...
не работает, может это както связано с листнером или с file:FileReference?

А как у вас del.php узнает, какой файл удалять? Вы ведь скрипту-то ни имя URL файла для удаления не передаете, ни как-то иначе оно у вас не формируется.
unlink("./".$_FILES['Filedata']['name']); - работать не будет, ведь суперглобальный массив $_FILES существует только в рамках POST-запроса на закачку.
Цитата:

Сообщение от lopster (Сообщение 1048809)
а если в конкретный момент загрузит файл не 1 человек

В такой ситуации нужно уникальное имя - ведь где гарантия, что одновременно, как вы говорите, кто-то не загрузит файл с именем, наприимер 1.jpg ?
Если лень возится с генерированием уникального имени, например, на основе идентификатора сессии, то можно попробовать сделать так:
Не делайте move_uploaded_file, а загружайте сразу же тот временный файл, который создает после закачки сервак.
Попробуйте забирать обратно файл $_FILES['Filedata']['tmp_name']. Кстати, тогда и удалять его нет необходимости, это работа сервера, который сам его и удалит по прошествии некоторого времени.

lopster 29.11.2011 14:31

Цитата:

Сообщение от mooncar (Сообщение 1048828)
А как у вас del.php узнает, какой файл удалять? Вы скрипту-то имя URL файла для удаления не передаете.

Не делайте move_uploaded_file, а загружайте сразу же тот временный файл, который создает после закачки сервак.
Попробуйте забирать обратно файл $_FILES['Filedata']['tmp_name']. Кстати, тогда и удалять его нет необходимости, это работа сервера, который сам его и удалит по прошествии некоторого времени.

и как все это делать?

mooncar 29.11.2011 14:40

Цитата:

Сообщение от lopster (Сообщение 1048829)
и как это делать?

Например
Код AS1/AS2:

var lv:LoadVars = new LoadVars();
var rlv:LoadVars= new LoadVars();
lv.todel = 'url файла на удаление';
lv.sendAndLoad('del.php', rlv, 'POST' );

php:
PHP код:

$todel =$_POST['todel']; 

или

Код AS1/AS2:

var rlv:LoadVars= new LoadVars();
lv.load('del.php?todel=' + 'url файла на удаление');

php:
PHP код:

$todel =$_GET['todel']; 

Идея понятна?

Добавлено через 3 минуты
Цитата:

Сообщение от lopster (Сообщение 1048829)
и как все это делать?

Насчет использования $_FILES['Filedata']['tmp_name'].
Возвращать URL временного файла после закачки на сервер флешке.
А она уже загрузит именно его.

lopster 29.11.2011 14:57

Цитата:

А как у вас del.php узнает, какой файл удалять? Вы скрипту-то имя URL файла для удаления не передаете.
почему тогда, когда пишу так, то все работает, т.е. удаляет?
Код AS1/AS2:

listener.onComplete = function(file:FileReference):Void 
{
        output = "Complete: " + file.name;
        var cnt:MovieClip = _root.createEmptyMovieClip('container', 0);
        loader.loadClip(file.name,cnt);
        file.upload("del.php");
};

и как реализовать
Цитата:

Попробуйте забирать обратно файл $_FILES['Filedata']['tmp_name']. Кстати, тогда и удалять его нет необходимости, это работа сервера, который сам его и удалит по прошествии некоторого времени.
Добавлено через 20 часов 0 минут
Сделал так, все рабоетает, спасибо.
Код AS1/AS2:

var lv:LoadVars = new LoadVars();
var rlv:LoadVars= new LoadVars();
lv.todel = 'url файла на удаление';
lv.sendAndLoad('del.php', rlv, 'POST' );

PHP код:

$todel =$_POST['todel']; 

На счет русских символов в названии файла думаю в перспективе проверять, чтобы в строке file.name не было символов кириллице из таблицы ascii

тему можно закрыть


Часовой пояс GMT +4, время: 17:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.