Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.11.2011, 02:31
lopster вне форума Посмотреть профиль Отправить личное сообщение для lopster Найти все сообщения от lopster
  № 1  
Ответить с цитированием
lopster
[+1 21.04.12]

Регистрация: Jan 2010
Сообщений: 25
По умолчанию удаление файла через 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']);
?>

Старый 29.11.2011, 10:56
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от lopster Посмотреть сообщение
куда вписать код file.upload("del.php")
В любое место в onLoadInit. Картинка же уже загружена, так? Об этом нам как раз и сообщает onLoadInit. Всё, что выполняется внутри него, относится к уже загруженному содержанию, поэтому картинку с сервера можно удалять.
Цитата:
Сообщение от lopster Посмотреть сообщение
еще вопрос как загружать файлы с названием на русском или как их не загружать(чтобы php не копировал их на сервер)
Так же как и на всех других языках. Просто после загрузки в move_uploaded_file задайте файлу любое имя, например temp.jpg, а не извлекайте родное из $_FILES. Ведь файл подлежит скорому удалению - не все ли равно как он будет называться на сервере?
Только надо будет учесть это в loadClip.
__________________
Идите первым!


Последний раз редактировалось mooncar; 29.11.2011 в 11:02.
Старый 29.11.2011, 11:42
lopster вне форума Посмотреть профиль Отправить личное сообщение для lopster Найти все сообщения от lopster
  № 3  
Ответить с цитированием
lopster
[+1 21.04.12]

Регистрация: Jan 2010
Сообщений: 25
Цитата:
Сообщение от mooncar Посмотреть сообщение
В любое место в 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 Посмотреть сообщение
Так же как и на всех других языках. Просто после загрузки в move_uploaded_file задайте файлу любое имя, например temp.jpg, а не извлекайте родное из $_FILES. Ведь файл подлежит скорому удалению - не все ли равно как он будет называться на сервере?
ну а если в конкретный момент загрузит файл не 1 человек,а много => у многих будет ошибка, у кого то загрузит не их файл,а чей-то еще

Старый 29.11.2011, 14:27
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от lopster Посмотреть сообщение
писал так
...
не работает, может это както связано с листнером или с file:FileReference?
А как у вас del.php узнает, какой файл удалять? Вы ведь скрипту-то ни имя URL файла для удаления не передаете, ни как-то иначе оно у вас не формируется.
unlink("./".$_FILES['Filedata']['name']); - работать не будет, ведь суперглобальный массив $_FILES существует только в рамках POST-запроса на закачку.
Цитата:
Сообщение от lopster Посмотреть сообщение
а если в конкретный момент загрузит файл не 1 человек
В такой ситуации нужно уникальное имя - ведь где гарантия, что одновременно, как вы говорите, кто-то не загрузит файл с именем, наприимер 1.jpg ?
Если лень возится с генерированием уникального имени, например, на основе идентификатора сессии, то можно попробовать сделать так:
Не делайте move_uploaded_file, а загружайте сразу же тот временный файл, который создает после закачки сервак.
Попробуйте забирать обратно файл $_FILES['Filedata']['tmp_name']. Кстати, тогда и удалять его нет необходимости, это работа сервера, который сам его и удалит по прошествии некоторого времени.
__________________
Идите первым!


Последний раз редактировалось mooncar; 29.11.2011 в 14:32.
Старый 29.11.2011, 14:31
lopster вне форума Посмотреть профиль Отправить личное сообщение для lopster Найти все сообщения от lopster
  № 5  
Ответить с цитированием
lopster
[+1 21.04.12]

Регистрация: Jan 2010
Сообщений: 25
Цитата:
Сообщение от mooncar Посмотреть сообщение
А как у вас del.php узнает, какой файл удалять? Вы скрипту-то имя URL файла для удаления не передаете.

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


Последний раз редактировалось lopster; 29.11.2011 в 14:46.
Старый 29.11.2011, 14:40
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от lopster Посмотреть сообщение
и как это делать?
Например
Код 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 Посмотреть сообщение
и как все это делать?
Насчет использования $_FILES['Filedata']['tmp_name'].
Возвращать URL временного файла после закачки на сервер флешке.
А она уже загрузит именно его.
__________________
Идите первым!


Последний раз редактировалось mooncar; 29.11.2011 в 14:43.
Старый 29.11.2011, 14:57
lopster вне форума Посмотреть профиль Отправить личное сообщение для lopster Найти все сообщения от lopster
  № 7  
Ответить с цитированием
lopster
[+1 21.04.12]

Регистрация: Jan 2010
Сообщений: 25
Цитата:
А как у вас 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

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


Последний раз редактировалось lopster; 29.11.2011 в 15:02.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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