Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Передача данных из Uploadify в php (https://javascript.ru/forum/jquery/31228-peredacha-dannykh-iz-uploadify-v-php.html)

frutality 30.08.2012 20:00

Передача данных из Uploadify в php
 
Здравствуйте, уважаемые форумчане.

Речь пойдет о плагине для jQuery - Uploadify (мультизагрузка файлов на связке JS + SWF + PHP).

Установлена свежая (3.2) версия Uploadify и jQuery 1.5.2.

Задача: вместе с загрузкой нескольких файлов отправлять в php-скрипт какие-то данные (скажем, текстовую переменную). Значение этой переменной зависит от действий пользователя на странице и не может быть известно заранее (ниже объясню, почему это важно).

Для решения этой, казалось бы, простой задачи в плагине предусмотрен параметр formData:
$(document).ready(function() {
      $('#file_upload').uploadify({
        'swf'  : 'uploadify/uploadify.swf',
        'uploader'    : 'uploadify/uploadify.php',
        'formData'      : {'someKey' : 'someValue'}
      });
    });


В скрипте uploadify.php пишем одну единственную строку:
echo $_POST['someKey'];

Результат - ожидаемый, скрипт вернет "someValue".

Теперь самое интересное. Вот пользователь произвел какие-то действия и значение переменной someKey необходимо изменить. В документации по uploadify сказано следующее: "If you plan on setting these values dynamically, this should be done using the ‘settings’ method in the onUploadStart event" (если вы планируете менять эти значения динамически, следует использовать метод 'settings' в событии onUploadStart). И даже приведен пример, где после строки с formData добавлен обработчик события onUploadStart:
$(document).ready(function() {
      $('#file_upload').uploadify({
        'swf'  : 'uploadify/uploadify.swf',
        'uploader'    : 'uploadify/uploadify.php',
        'formData'      : {'someKey' : 'someValue'},
        'onUploadStart' : function(file) {
            $("#file_upload").uploadify("settings", "someKey", "Новое значение");
        } 
      });
    });


Принимаем значение скриптом uploadify.php и видим старое значение ("someValue")! Определенное при объявлении formData, но никак ни при onUploadStart!

Закрадываются мысли: а может, там ничего не переопределилось? Дописываем старый добрый alert:
$(document).ready(function() {
      $('#file_upload').uploadify({
        'swf'  : 'uploadify/uploadify.swf',
        'uploader'    : 'uploadify/uploadify.php',
        'formData'      : {'someKey' : 'someValue'},
        'onUploadStart' : function(file) {
            $("#file_upload").uploadify("settings", "someKey", "Новое значение");
            alert($("#file_upload").uploadify('settings', 'someKey'));
        } 
      });
    });


И alert выводит "Новое значение", как и должно быть. А через доли секунды php-скрипт возвращает нам "someValue" :(

Как же быть, помогите пожалуйста, как же мне передать вместе с загружаемыми файлами какие-нибудь данные?

Желательно в пределах uploadify или просто средствами jQuery, но если вы знаете очень хороший аналог uploadify, то напишите его название в этой теме, пожалуйста.

Заранее благодарю.

Serg_pnz 30.08.2012 20:31

*оффтоп:
есть попроще плагин http://malsup.com/jquery/form/#file-upload

frutality 31.08.2012 06:56

О, спасибо, посмотрю этот вариант, если решения с uploadify пока не предвидится :)

strelcov_a_a 22.10.2012 17:45

Для версии 3+
'onUploadStart' : function(file) {
$("#file_upload").uploadify("settings", 'formData',{"someKey": $('input[name="user_login"]').attr('value')})
}

ну второй параметр соответственно может быть любым, я передал значения из какого либо инпута

Sleeve 15.04.2016 19:00

Как через uploadifive передать файл, который формируется на странице пользователем и обратно получить ссылку на него?

def38rus 19.04.2016 04:58

Цитата:

Сообщение от Sleeve (Сообщение 414232)
Как через uploadifive передать файл, который формируется на странице пользователем и обратно получить ссылку на него?

вот кусок из функции:
$('#file_upload').uploadify({
'formData'     : {
'method'   : 'post',
'dataType': "text", 
'timestamp' : '<?php echo $timestamp;?>',
'token'     : '<?php echo md5('unique_salt' . $timestamp);?>' },
'auto'     : false,
 'swf'      : 'uploadify.swf',
 'uploader' : 'uploadify.php',
// .....
 'onUploadComplete' : function(data) {
   /// здесь получить из 'uploadify.php'
			   	                 }

           });

в файле uploadify.php все операции по загрузке файла и прочее...
результат вернуть из него html data ..
ну или к примеру, вот часть кода из него:
$targetFolder = '/files/'; // каталог назначения загруженных файлов
$verifyToken = md5('unique_salt' . $_POST['timestamp']);
if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
	$tempFile = $_FILES['Filedata']['tmp_name'];
	$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
	// проверка типа файла
	$fileTypes = array('jpg','jpeg','docx','doc','xlsx','xls','pdf','ppsx','pptx','ppt','zip','7z','rar','avi','mpg','mpeg','exe','msi'); // разрешенные расширения 
	$fileParts = pathinfo($_FILES['Filedata']['name']);
  	$file_ext  = $fileParts['extension'] ; //расширение загружаемого файла
    $filename = md5(microtime()); //генерация нового имени
    $new_file = $filename.'.'.$file_ext; 
   	$targetFile = rtrim($targetPath,'/') . '/' . $new_file; //переименованный файл подготовлен
	if (in_array($fileParts['extension'],$fileTypes)) {
		move_uploaded_file($tempFile,$targetFile);      // если тип файла разрешен - заливаем
		echo '1'; // ключ выполненной операции
$endurl='http://'.$_SERVER['SERVER_NAME'].$targetFolder.$new_file; //сформировал URL загруженного файла для браузера
}

Sleeve 20.04.2016 05:50

Цитата:

Сообщение от def38rus
def38rus

Огромное спасибо за сообщение, но я так и не понял куда засунуть данные из переменной во фронте.

def38rus 20.04.2016 11:34

получить $endurl ?
да любым ajax методом..
но есть нюанс :)
'onUploadComplete' : function(data) должно вернуть единицу как подтверждения выполнения операции загрузки файла.
я писал, для своих целей, запись этого значения в БД, а на функцию загрузки файла навешивал запрос к БД и вывод оттуда инфы в див..
вариантов много...

Sleeve 20.04.2016 16:25

Цитата:

Сообщение от def38rus
получить $endurl ?

Нет.
uploadifive работает с input-file, а у меня содержимое файла формируется на странице самим пользователем. Они находятся в переменной js. Отправка файла через input-file и получение ссылки из файлохранилища уже настроенно. Но мне нужно как-то подставить данные из переменной вместо input-file.

def38rus 22.04.2016 03:54

Цитата:

Сообщение от Sleeve (Сообщение 414571)
.... у меня содержимое файла формируется на странице самим пользователем. Они находятся в переменной js. ..... Но мне нужно как-то подставить данные из переменной вместо input-file.

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


Часовой пояс GMT +3, время: 03:38.