0

我在 php 上使用 blueimp。在 HTML 中,我放置了一个隐藏的输入字段以将 User_ID(登录后,来自 DB 的用户 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']; ?>">

索引.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 的脚本部分中设置下载文件目录吗?

4

3 回答 3

1

问题是您检查$_POST数组中的文件,该文件仅在它们包含在发布请求中时才具有值。现在,问题是您没有在帖子发生时将它们存储在某个地方:

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

您可以使用数据库(例如 MySQL)来存储值,例如,您可以将文件列表存储到本地文件中,或者您可以存储在$_SESSION变量中,或者,如果您知道,您甚至可以不存储它文件所在的位置,然后您可以使用scandir

于 2015-02-17T16:33:14.837 回答
1

找到解决方案!

我只是犯了一个错误,没有在 blueimp 的 index.php 中启动会话。在那之后,一切都像一个缺陷!每个用户都根据他从数据库中的用户 ID(保存在会话中)获得自己的上传/下载目录。

我的工作 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 之后传递......而且为时已晚。

于 2015-02-18T13:58:21.883 回答
0

我知道这是一篇较旧的帖子,因此我的贡献可能不相关,但这篇文章帮助我回答了一个问题,我想为同一问题提供我的具体解决方案。

我需要能够使用我之前生成的字符串设置文件夹的名称,并将其作为 post 变量传递。该字符串存储在数据库中,并且是特定于客户端的。但在申请过程完成后将不再使用。

上传者做了我们需要的一切,除了它使用会话 ID 作为文件夹名称。使用这个系统,一切都按预期工作,而会话变量存在。

无论如何,这就是我所做的:在 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',

就是这样!

现在系统按我的预期工作。非常感谢!

于 2015-11-11T11:31:12.790 回答