я использую 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?
Проблема в том, что вы проверяете файлы в вашем $_POST
массив, который имеет значения только тогда, когда они были включены в запрос на публикацию. Теперь проблема в том, что вы не храните их где-то, когда произошла запись:
if (isset($_POST['user_file_directory'])) {
//store the values...
}
Вы можете сохранить значения, используя базу данных, такую как MySQL, чтобы назвать пример, или вы можете сохранить в локальном файле список файлов, или вы можете сохранить в $_SESSION
переменная, или, вы даже можете жить без сохранения, если вы знаете, где находятся файлы, то вы можете использовать ScanDir.
Решение найдено!
Я только сделал ошибку, чтобы не начать сеанс в 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 … и это слишком поздно.
Я понимаю, что это старый пост, и поэтому мой вклад может быть неактуальным, но этот пост помог мне ответить на вопрос, и я хотел предоставить свое конкретное решение той же проблемы.
Мне нужно было иметь возможность задать имя папки с помощью строки, из которой я генерирую ранее, и передавать ее как переменную 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',
И это все!
Теперь система работает так, как задумано для меня. Спасибо!