Пользовательский каталог $options для jQuery Blueimp Upload Plugin?

Я работаю с плагином blueimp jQuery File Upload и пытаюсь настроить настраиваемое поле, которое пользователь может изменить для загрузки.

Внутри класса PHP есть конструкция, которая устанавливает все переменные опций по умолчанию. Я ищу лучший способ хранения этих данных, поэтому после того, как пользователь установит значение, оно будет сохранено как новая папка для загрузки по умолчанию. Я имею в виду внешний XML-файл, который импортируется в PHP-скрипт.

Вот функция конструктора класса загрузки:

    function __construct($options=null) {
    $this->options = array(
        'script_url' => $this->getFullUrl().'/',
        'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',

Я надеюсь, что это имеет смысл, и я рад прояснить что-нибудь. Но в основном - как я могу разрешить пользователям вручную вводить структуру каталогов, и это становится новым каталогом загрузки для изображений? Где я могу сохранить эту новую строковую переменную? Вероятно, не внутри PHP, а, возможно, во внешнем файле, таком как XML или JSON?


person Jake    schedule 15.08.2012    source источник


Ответы (3)


Я заметил, что вы и я опубликовали проблему с загрузкой blueimp на github примерно в одно и то же время. Я не уверен, что у меня есть полный ответ для вас, но позвольте мне дать вам то, что я нашел до сих пор. Может поможет:

Я искал способ фильтровать загруженные файлы пользователем из аутентифицированной системы. Я разместил github.com/blueimp/jQuery-File-Upload/issues/1578. Автор плагина предложил фильтровать на стороне сервера. Я нашел github.com/blueimp/jQuery-File-Upload/issues/1149, где объясняется, как фильтровать на стороне сервера. Я сделал это, и это работает до загрузки. Теперь у меня есть настройка, в которой у каждого пользователя есть подпапка в папке загрузки с именем их уникального идентификационного номера, которая содержит их изображения. Так или иначе, это динамический способ установить путь загрузки. Может быть, вы можете использовать его.

Моя текущая проблема заключается в том, что, хотя я могу подтвердить, что изображения загружены, они не отображаются в таблице загрузки. См. github.com/blueimp/jQuery-File-Upload/issues/1587.

Одна попытка, которую я предпринял, чтобы исправить это, включала попытку передать параметры в конструктор:

Вот мой код в файле blueimp index.php:

$customer_path_files = dirname($_SERVER['SCRIPT_FILENAME']) .     DIRECTORY_SEPARATOR.         'files' . DIRECTORY_SEPARATOR . $uid . DIRECTORY_SEPARATOR;
    if (!file_exists($customer_path_files)) {
    @mkdir($customer_path_files);
}
$customer_path_thumbnails = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR     . 'thumbnails' . DIRECTORY_SEPARATOR . $uid . DIRECTORY_SEPARATOR;
if (!file_exists($customer_path_thumbnails)) {
    @mkdir($customer_path_thumbnails);
}

$options=array(
'upload_dir' => $customer_path_files,
'upload_url' => base_url().'blueimp/server/php/files/'.$uid.'/',
'thumbnail' => array(
                'upload_dir' => $customer_path_thumbnails,
                'upload_url' => base_url().'blueimp/server/php/thumbnails/'.$uid.'/',
                'max_width' => 80,
                'max_height' => 80
            )
);


require('upload.class.php');

$upload_handler = new uploadHandler($options);

Надеюсь, здесь что-то поможет,


Приложение:

Я надеюсь, что это так. Кстати, я прочитал Плагин Jquery File Upload: динамически изменить путь загрузки?. Это именно то, что я пытаюсь сделать. Если вы тоже, позвольте мне просто сказать, что я также пытался передать переменную сеанса (в моем случае вариант codeigniter ( $this->session->userdata('uid')) в скрытом поле в индекс плагина. php, но, как и в посте, он не существует в index.php (я думаю, потому что кнопка загрузки не нажимается для повторного заполнения или удаления). Это мой первый опыт работы с ajax, но я думаю, что идентификатор сеанса должен каким-то образом быть отправлен через Json. Я пытаюсь понять это. Похоже, это то, что сделал Крис Г. Если это поможет, я разместил следующий вопрос с некоторыми более подробной информацией:

http://www.dynamicdrive.com/forums/showthread.php?p=279824

person user1592380    schedule 16.08.2012
comment
Спасибо, я должен попробовать это! Я очень ценю это. Я также нашел этот вопрос о стеке, который кажется похожим, так что это будет просто методом проб и ошибок, прежде чем я смогу заставить это работать. - person Jake; 16.08.2012
comment
в вашем файле index.php вы можете использовать: $reqMeth = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : ''; if ($reqMeth = 'POST') /* do work */ - это то, что вы ищете вместо переменной POST. Метод initialize внутри класса UploadHandler.php показывает ожидаемые строки и является переключателем, который, как вы увидите, точно показывает, что он делает для каждой возможности. GET будет для ваших загрузок. - person SpYk3HH; 17.01.2014

Мой код для пользовательских данных wordpress,

До:

function __construct($options = null, $initialize = true) {

    $this->options = array(
        'script_url' => $this->get_full_url().'/',
        'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',
        'upload_url' => $this->get_full_url().'/files/',
        'user_dirs' => false,
        'mkdir_mode' => 0755,
        'param_name' => 'files',

После:

function __construct($options = null, $initialize = true) {

    require_once '../../../../wp-config.php';
    global $wpdb, $user_ID;

        if($user_ID) $userdi = $user_ID.'/';

    $this->options = array(
        'script_url' => $this->get_full_url().'/',
        'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/'.$userdi,
        'upload_url' => $this->get_full_url().'/files/'.$userdi,
        'user_dirs' => false,
        'mkdir_mode' => 0755,
        'param_name' => 'files',
person Onur Boz    schedule 13.03.2013
comment
Это выглядит хорошо, и это имеет смысл. В итоге я позволил пользователю настроить URL-адрес, но я искал способ попасть в систему Wordpress. Спасибо за публикацию. - person Jake; 21.03.2013
comment
//if($user_ID) $userdi = $user_ID.'/'; заменить только отображаемое имя пользователя -› if($user_ID) $user=get_userdata($user_ID); $userdi =$user-›display_name.'/'; конец; - person Onur Boz; 22.03.2013

пару комментариев --

. Эти сообщения от 2012/13. В более поздних версиях jQuery File Upload есть опция 'user_dirs' => true, которая вставляет идентификатор пользователя в путь, по которому хранятся файлы: (из UploadHander.php)

protected function get_upload_path($file_name = null, $version = null) {
    ...
    return $this->options['upload_dir'].$this->get_user_path().$file_name;
}

где get_user_path возвращает пустую строку, если user_dirs не имеет значения true.

. Вместо того, чтобы переписывать UploadHander.php с вашими предпочтительными параметрами, вы также можете передать параметры конструктору UploadHandler -- в server/php/index.php замените

$uploadHandler = new UploadHandler();

с участием

$uploadHandler = new UploadHandler(array('option1' => value,
                                         'option2' => value));
person Blob    schedule 01.04.2018
comment
Я пишу этот комментарий, так как вы недавно внесли свой вклад в эту тему. Не могли бы вы предложить какие-либо подсказки здесь? stackoverflow.com/questions/56090215/ - person Stuart; 14.05.2019