【问题标题】:Custom $options directory for jQuery Blueimp Upload Plugin?jQuery Blueimp 上传插件的自定义 $options 目录?
【发布时间】:2012-08-11 21:25:48
【问题描述】:

我一直在使用blueimp jQuery File Upload plugin,我正在尝试设置一个用户可以更改上传的自定义字段。

在 PHP 类中有一个设置所有默认选项变量的结构。我正在寻找可以存储此数据的最佳方式,因此在用户设置值后,它将保存为新的默认上传文件夹。我正在考虑一个外部 XML 文件,将它们导入到 PHP 脚本中。

上传类构造函数如下:

    function __construct($options=null) {
    $this->options = array(
        'script_url' => $this->getFullUrl().'/',
        'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',

我希望这是有道理的,我很乐意澄清任何事情。但基本上 - 我如何允许用户手动输入目录结构并成为图像的新上传目录?我可以在哪里保存这个新的字符串变量?可能不在 PHP 内部,但可能在外部文件中,如 XML 或 JSON?

【问题讨论】:

    标签: php jquery plugins file-upload blueimp


    【解决方案1】:

    我注意到你和我几乎同时在 github 上发布了一个 blueimp 上传问题。我不确定我是否有完整的答案给你,但让我给你到目前为止我发现的东西。也许会有所帮助:

    我一直在寻找一种方法来过滤用户从经过身份验证的系统中上传的文件。我发布了 github.com/blueimp/jQuery-File-Upload/issues/1578 。插件作者建议我在服务器端进行过滤。我找到了 github.com/blueimp/jQuery-File-Upload/issues/1149,它解释了如何在服务器端进行过滤。我已经这样做了,它可以上传。我现在设置了每个用户在上传文件夹中有一个子文件夹,命名为他们的唯一 ID 号,其中包含他们的图像。所以无论如何,这是一种设置上传路径的动态方式。也许你可以使用它。

    我目前的问题是,虽然我可以确认图片已上传,但它们在下载表中不可见。请参阅 github.com/blueimp/jQuery-File-Upload/issues/1587。

    我为解决此问题所做的一次尝试包括尝试将选项传递给构造函数:

    这是我在 blueimp index.php 文件中的代码:

    $customer_path_files = dirname($_SERVER['SCRIPT_FILENAME']) .     DIRECTORY_SEPARATOR.         'files' . DIRECTORY_SEPARATOR . $uid . DIRECTORY_SEPARATOR;
        if (!file_exists($customer_path_files)) {
        @mkdir($customer_path_files);
    }
    $customer_path_thumbnails = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR     . 'thumbnails' . DIRECTORY_SEPARATOR . $uid . DIRECTORY_SEPARATOR;
    if (!file_exists($customer_path_thumbnails)) {
        @mkdir($customer_path_thumbnails);
    }
    
    $options=array(
    'upload_dir' => $customer_path_files,
    'upload_url' => base_url().'blueimp/server/php/files/'.$uid.'/',
    'thumbnail' => array(
                    'upload_dir' => $customer_path_thumbnails,
                    'upload_url' => base_url().'blueimp/server/php/thumbnails/'.$uid.'/',
                    'max_width' => 80,
                    'max_height' => 80
                )
    );
    
    
    require('upload.class.php');
    
    $upload_handler = new uploadHandler($options);
    

    希望这里有帮助,


    附录:

    希望如此。顺便说一句,我读了Jquery File Upload plugin: Dynamically change upload path?。这正是我想要做的正是。如果您也是,我只想说我还尝试将隐藏字段中的会话变量(在我的情况下为 codeigniter 变体( $this->session->userdata('uid') )传递给插件的索引。 php 文件,但就像在帖子中一样,它在 index.php 中不存在(我认为是因为,上传按钮不是为重新填充或删除而推送的)。这是我第一次使用 ajax,但我认为会话 ID 必须以某种方式通过 Json 发送。我正试图弄清楚这一点。听起来这就是 Chris G 所做的。如果有任何帮助,我已经发布了以下问题以及更多详细信息:

    http://www.dynamicdrive.com/forums/showthread.php?p=279824

    【讨论】:

    • 谢谢,我得试试这个!我非常感谢它。我还发现 this stack question 似乎很相似,所以在我可以让它工作之前,它只是需要反复试验。
    • 在您的 index.php 文件中,您可以使用:$reqMeth = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : ''; if ($reqMeth = 'POST') /* do work */ 是您要查找的,而不是 POST 变量。 UploadHandler.php 类中的initialize 方法向您显示预期的字符串,并且是一个开关,正如您将看到的,它准确地向您展示了它对每种可能性的作用。 GET 供您下载。
    【解决方案2】:

    我的 wordpress 用户数据代码,

    之前:

    function __construct($options = null, $initialize = true) {
    
        $this->options = array(
            'script_url' => $this->get_full_url().'/',
            'upload_dir' => dirname($_SERVER['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) {
    
        require_once '../../../../wp-config.php';
        global $wpdb, $user_ID;
    
            if($user_ID) $userdi = $user_ID.'/';
    
        $this->options = array(
            'script_url' => $this->get_full_url().'/',
            'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/'.$userdi,
            'upload_url' => $this->get_full_url().'/files/'.$userdi,
            'user_dirs' => false,
            'mkdir_mode' => 0755,
            'param_name' => 'files',
    

    【讨论】:

    • 这看起来不错,而且很有意义。我最终允许用户自定义 URL,但我正在寻找一种进入 Wordpress 系统的方法。感谢发帖。
    • //if($user_ID) $userdi = $user_ID.'/';仅替换用户显示名称 -> if($user_ID) $user=get_userdata($user_ID); $userdi =$user->display_name.'/'; endif;
    【解决方案3】:

    几个cmets --

    。这些职位来自 2012/13 年度。更高版本的 jQuery File Upload 有一个选项,'user_dirs' => true,它将用户标识符插入到存储文件的路径中:(来自 UploadHander.php)

    protected function get_upload_path($file_name = null, $version = null) {
        ...
        return $this->options['upload_dir'].$this->get_user_path().$file_name;
    }
    

    除非 user_dirs 为真,否则 get_user_path 返回一个空字符串。

    。除了用您喜欢的选项重写 UploadHander.php,您还可以将选项传递给 UploadHandler 构造函数——在 server/php/index.php 中,替换

    $uploadHandler = new UploadHandler();
    

    $uploadHandler = new UploadHandler(array('option1' => value,
                                             'option2' => value));
    

    【讨论】:

    猜你喜欢
    • 2014-12-04
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多