PDA

Просмотр полной версии : Замена имени у загружаемого на сервер файла


Mulin
20.01.2011, 13:05
Парни такое дело. Нарисовал простенький аплоадер на сервак

import flash.net.FileReference;//импортирую класс
var perem:FileReference = new FileReference();//создаю его экземпляр
var slush:Object = new Object();//слушатель
perem.addListener(slush);..аттачу слушатель
browse_btn.clickHandler = function()//открываем папку
{
perem.browse([{description:"JPEGs", extension:"*.JPG;*.jpg"}]);
};
upload_btn.clickHandler = function()//собсно грузим картинко
{
perem.upload("upload.php");
};


Ничего сложного все просто.
Пэхапэшник такой же несложный

$filename = $_FILES['Filedata']['name']; //имя файла
$filetmpname = $_FILES['Filedata']['tmp_name']; //адрес tmp
$fileType = $_FILES["Filedata"]["type"]; //тип файла
$fileSizeMB = ($_FILES["Filedata"]["size"] / 1024 / 1000); //размер файла
move_uploaded_file($_FILES['Filedata']['tmp_name'], "images/".$filename); //сохраняем файл в папку images


Все работает красиво. Но нужно отсылать пэхапэшнику не родное имя файла, а то, которое я введу. Я даже не знаю с какой стороны подойти к этому вопроссу. Слышал что у FileReference есть свойство имени, но только для чтения. Парни помогите решить проблему...

mooncar
20.01.2011, 13:13
В AS:
var fileneme:String = 'image1';

upload_btn.clickHandler = function()//собсно грузим картинко
{
perem.upload('upload.php?filename=' + fileneme);
};

В PHP:
$filename = $_GET['filename']; //имя файла
...
move_uploaded_file($_FILES['Filedata']['tmp_name'], "images/".$filename); //сохраняем файл в папку images



А лучше POST

upload_btn.clickHandler = function()//собсно грузим картинко
{
perem.postData = file_name.text ; //допустим, вы ввели желаемое имя в поле file_name (не про забыть валидацию!)
perem.upload('upload.php');
};

$filename = $_POST['filename']; //имя файла
...
move_uploaded_file($_FILES['Filedata']['tmp_name'], "images/".$filename); //сохраняем файл в папку images

Во втором варианте используем свойство FileReference.postData.
Я правда GET-ом такое делал последние разы, но ИМХО, POST-ом лучше.

И самое главное, по поводу "Слышал что...". Если что-то нужно, используйте хелп, я например, туда всегда хожу, если необходимость и ощущение, что нужное свойство и метод у класса есть. Очень много хорошего там найдете, включая примеры. :)

Mulin
20.01.2011, 13:53
Чет не то не то не работает, где то я чето накосячил наверно.
Можно вас попросить глянуть код, и еще вопрос, чем post лучше?

mooncar
20.01.2011, 17:46
FLA для CS3 сохраните.

Mulin
20.01.2011, 18:38
А каким образом это влияет? я же в любом случае компилю проект

mooncar
20.01.2011, 19:26
Это влияет на то, что не у всех файл открывается, значит помочь вам может меньшее количество людей.
У меня старше CS3 файлы не открываются.

Mulin
20.01.2011, 20:03
Ой простите не понял вопросса)) персохранил
атож я уже стал переосмысливать весь свой подход к флешу)))

mooncar
20.01.2011, 21:03
1. Ошибся я там. Надо, например, так:
upload_btn.clickHandler = function()
{
perem.postData = 'filename=' + file_name.text + '.jpg'; //собственно имя переменной для POST не было указано
perem.upload('upload.php');
};

2. Проверьте также права доступа у директории на запись.

С учетом (1 - 2) все должно заработать.

POST, например, хорош тем, что не через адресную строку передаются данные.

Mulin
20.01.2011, 21:24
Ой спасибо, дружище, выручили в очередной раз. Премного благодарен

Добавлено через 2 минуты
В случае с не POST это небезопасно?

mooncar
20.01.2011, 21:34
Данные отловить можно и POST, что и делается, просто так целесообразней передавать данные. Через адресную строку передать несколько страниц текста, например, как-то не очень.
POST не кэшируется.
Почитайте материалы, в чем отличия, я привел не самые основные нюансы.

Mulin
20.01.2011, 21:37
Более менее начинаю вникать. То есть сам файл он передает отдельным потоком, а данные относящиеся к нему либо через адресную строку (что в самом деле не очень) либо методом POST

mooncar
20.01.2011, 21:43
У POST все передается в теле запроса - и сам файл, и дополнительные данные, а у GET - данные передаются в URL'е. GET-ом файлы не передаются.
В 1 -м варианте я предлагал комбинированный метод - файл скрипту передается POST с помощью метода upload экземпляра класса FileReference, и тому же скрипту передается одновременно имя файла в URL'e, т.е GET-ом.

Mulin
20.01.2011, 22:04
Да, уже изучаю, действительно POST в данном случае намного логичнее и, что ли, правильнее

mooncar
20.01.2011, 22:12
Каждому методу - свое применение. GET тоже полезен и незаменим в некоторых случаях.