PHP - blueimp 自定义上传目录 - 重新加载时为空列表
PHP - blueimp custom upload directory - empty list on reload
我在 php 上使用 blueimp。在 HTML 中,我放置了一个隐藏的输入字段,以将 User_ID(登录后,来自数据库的用户 ID)作为 $_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 页面加载时检索自定义上传文件夹的内容?我必须在 HTML 的脚本部分设置下载文件目录吗?
问题是您检查 $_POST
数组中的文件,该数组只有在包含在 post 请求中时才具有值。现在,问题是当 post 发生时你没有将它们存储在某个地方:
if (isset($_POST['user_file_directory'])) {
//store the values...
}
您可以使用数据库存储值,例如 MySQL,举个例子,或者您可以将文件列表存储到本地文件中,或者您可以存储在 $_SESSION
变量,或者,如果你知道文件的位置,你甚至可以不存储它,那么你可以使用 scandir.
已找到解决方案!
我只是犯了错误,没有在 blueimp 的 index.php 内启动会话。在那之后,一切都像一个缺陷!每个用户根据他的用户 ID 从数据库(保存在会话中)获得自己的 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);
}
?>
Lajos Arpad 给了我正确的提示:$_POST 不能用于列出目录内容,因为它的值只会在 Form-Action 之后传递...而那已经太晚了。
我知道这是一个较旧的 post,因此我的贡献可能不相关,但是这个 post 帮助我回答了一个问题,我想提供我对同一问题的具体解决方案。
我需要能够使用我之前生成的字符串设置文件夹的名称并作为 post 变量传递。该字符串存储在数据库中,并且是特定于客户端的。但在申请过程结束后将不会被使用。
除了使用会话 ID 作为文件夹名称外,上传器会做我们需要的一切。使用这个系统,一切都按预期工作,而会话变量存在。
无论如何,这是我所做的:
在 index.php 页面中,在上传系统的根目录下,我执行了以下操作:
$app_code = $_POST['app_code'];
session_id($app_code);
session_start();
索引页就是这些。
在ClassUploadHandler.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',
就是这样!
现在系统可以正常工作了。非常感谢!
我在 php 上使用 blueimp。在 HTML 中,我放置了一个隐藏的输入字段,以将 User_ID(登录后,来自数据库的用户 ID)作为 $_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 页面加载时检索自定义上传文件夹的内容?我必须在 HTML 的脚本部分设置下载文件目录吗?
问题是您检查 $_POST
数组中的文件,该数组只有在包含在 post 请求中时才具有值。现在,问题是当 post 发生时你没有将它们存储在某个地方:
if (isset($_POST['user_file_directory'])) {
//store the values...
}
您可以使用数据库存储值,例如 MySQL,举个例子,或者您可以将文件列表存储到本地文件中,或者您可以存储在 $_SESSION
变量,或者,如果你知道文件的位置,你甚至可以不存储它,那么你可以使用 scandir.
已找到解决方案!
我只是犯了错误,没有在 blueimp 的 index.php 内启动会话。在那之后,一切都像一个缺陷!每个用户根据他的用户 ID 从数据库(保存在会话中)获得自己的 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);
}
?>
Lajos Arpad 给了我正确的提示:$_POST 不能用于列出目录内容,因为它的值只会在 Form-Action 之后传递...而那已经太晚了。
我知道这是一个较旧的 post,因此我的贡献可能不相关,但是这个 post 帮助我回答了一个问题,我想提供我对同一问题的具体解决方案。
我需要能够使用我之前生成的字符串设置文件夹的名称并作为 post 变量传递。该字符串存储在数据库中,并且是特定于客户端的。但在申请过程结束后将不会被使用。
除了使用会话 ID 作为文件夹名称外,上传器会做我们需要的一切。使用这个系统,一切都按预期工作,而会话变量存在。
无论如何,这是我所做的: 在 index.php 页面中,在上传系统的根目录下,我执行了以下操作:
$app_code = $_POST['app_code'];
session_id($app_code);
session_start();
索引页就是这些。
在ClassUploadHandler.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',
就是这样!
现在系统可以正常工作了。非常感谢!