пользовательский каталог загрузки blueimp — пустой список при перезагрузке

я использую blueimp на php. В HTML я поместил скрытое поле ввода для отправки идентификатора пользователя (после входа в систему, идентификатора пользователя из БД) в обработчик загрузки в виде значения $ _POST. Я использую значение User_ID в качестве имени каталога загрузки, чтобы отделить файлы каждого пользователя друг от друга.

HTML:

    <form id="fileupload" action="server/php/index.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="user_file_directory" id="user_file_directory" value="<?php echo $_SESSION['user_ID']; ?>">

index.php:

<?php
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$user_filedirectory = $_POST['user_file_directory'];
$urlHolder = 'user_'.$user_filedirectory.'/';
$options = array(
'upload_dir' => $_SERVER['DOCUMENT_ROOT'].'/ds-admin/server/php/'.$urlHolder,
'upload_url' => './server/php/'.$urlHolder.'/',
);
if($urlHolder){
$upload_handler = new UploadHandler($options , true , null);
}
?>

Это прекрасно работает, чтобы загрузить что-то, и после загрузки я могу видеть эскизы и даже увеличивать их. Но при перезагрузке HTML список существующих файлов становится пустым, а файлы все еще существуют на сервере внутри нужной папки. При повторной загрузке файла я увижу только новые файлы.

Как я могу получить содержимое пользовательской папки загрузки при загрузке HTML-страницы? я должен установить директорию download-file-directory в части скрипта HTML?

0

Решение

Проблема в том, что вы проверяете файлы в вашем $_POST массив, который имеет значения только тогда, когда они были включены в запрос на публикацию. Теперь проблема в том, что вы не храните их где-то, когда произошла запись:

if (isset($_POST['user_file_directory'])) {
//store the values...
}

Вы можете сохранить значения, используя базу данных, такую ​​как MySQL, чтобы назвать пример, или вы можете сохранить в локальном файле список файлов, или вы можете сохранить в $_SESSION переменная, или, вы даже можете жить без сохранения, если вы знаете, где находятся файлы, то вы можете использовать ScanDir.

1

Другие решения

Решение найдено!

Я только сделал ошибку, чтобы не начать сеанс в index.php Blueimp. после этого все просыпается как недостаток! Каждый пользователь получает свой собственный каталог up / Download на основе своего идентификатора пользователя из базы данных (сохраняется в сеансе).

мой рабочий index.php теперь выглядит так:

<?php
/* SESSION START IS IMPORTANT   ;) */
session_start();

/*
* jQuery File Upload Plugin PHP Example 5.14
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/

error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$user_filedirectory = $_SESSION['user_ID'];
$urlHolder = 'user_'.$user_filedirectory.'/';
$options = array(
'upload_dir' => $_SERVER['DOCUMENT_ROOT'].'/ds-admin/server/php/'.$urlHolder,
'upload_url' => './server/php/'.$urlHolder.'',
);
if($urlHolder){
$upload_handler = new UploadHandler($options , true , null);
}
?>

Лайос Арпад дал мне правильный совет: $ _POST не может работать для вывода содержимого каталога, так как его значение будет передано только после Form-Action … и это слишком поздно.

1

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

Мне нужно было иметь возможность задать имя папки с помощью строки, из которой я генерирую ранее, и передавать ее как переменную post. Эта строка хранится в базе данных и зависит от клиента. Но не будет использоваться после завершения процесса подачи заявки.

Загрузчик делает все, что нам нужно, за исключением того, что в качестве имени папки используется идентификатор сеанса. В этой системе все работает, как задумано, в то время как переменная сеанса существует.

Во всяком случае, вот что я сделал:
На странице index.php, в корне системы загрузки, я сделал следующее:

$app_code = $_POST['app_code'];
session_id($app_code);
session_start();

Вот и все на странице индекса.

На странице Class UploadHandler.php я просто установил следующее

function __construct($options = null, $initialize = true, $error_messages = null) {
$this->response = array();
$this->options = array(
'script_url' => $this->get_full_url().'/'.basename($this->get_server_var('SCRIPT_NAME')),
'upload_dir' => dirname($this->get_server_var('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, $error_messages = null) {
$this->response = array();
$this->options = array(
'script_url' => $this->get_full_url().'/'.basename($this->get_server_var('SCRIPT_NAME')),
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/',
'upload_url' => $this->get_full_url().'/files/',
'user_dirs' => true,
'mkdir_mode' => 0755,
'param_name' => 'files',

И это все!

Теперь система работает так, как задумано для меня. Спасибо!

0
По вопросам рекламы [email protected]