Передача данных из 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, то напишите его название в этой теме, пожалуйста. Заранее благодарю. |
*оффтоп:
есть попроще плагин http://malsup.com/jquery/form/#file-upload |
О, спасибо, посмотрю этот вариант, если решения с uploadify пока не предвидится :)
|
Для версии 3+
'onUploadStart' : function(file) { $("#file_upload").uploadify("settings", 'formData',{"someKey": $('input[name="user_login"]').attr('value')}) } ну второй параметр соответственно может быть любым, я передал значения из какого либо инпута |
Как через 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 загруженного файла для браузера } |
Цитата:
|
получить $endurl ?
да любым ajax методом.. но есть нюанс :) 'onUploadComplete' : function(data) должно вернуть единицу как подтверждения выполнения операции загрузки файла. я писал, для своих целей, запись этого значения в БД, а на функцию загрузки файла навешивал запрос к БД и вывод оттуда инфы в див.. вариантов много... |
Цитата:
uploadifive работает с input-file, а у меня содержимое файла формируется на странице самим пользователем. Они находятся в переменной js. Отправка файла через input-file и получение ссылки из файлохранилища уже настроенно. Но мне нужно как-то подставить данные из переменной вместо input-file. |
Цитата:
|
Часовой пояс GMT +3, время: 03:38. |