【问题标题】:PHP - blueimp custom upload directory - empty list on reloadPHP - blueimp 自定义上传目录 - 重新加载时的空列表
【发布时间】:2015-02-17 16:03:49
【问题描述】:

我在 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']; ?>">

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

【问题讨论】:

    标签: php upload blueimp filelist


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。我确实将此值存储在 Session 变量中。所以我知道文件在哪里。但是如何告诉blueimp查找文件(不上传到)的文件目录是“user_”+“Session[user_ID]”?
    • 在 PHP 中,一般可以这样说:"user_".$_SESSION["user_id"],注意,点(.) 是 PHP 中的字符串连接运算符。跨度>
    【解决方案2】:

    找到解决方案!

    我只是犯了一个错误,没有在 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 之后传递...而且为时已晚。

    【讨论】:

      【解决方案3】:

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

      我需要能够使用之前生成的字符串设置文件夹的名称,并将其作为 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',
      

      就是这样!

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

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 2015-02-15
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 2016-09-21
        • 2014-11-02
        • 1970-01-01
        • 2011-07-17
        相关资源
        最近更新 更多