Передача данных из 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, время: 00:12. |