jQuery Blueimp上传插件的自定义$ options目录?

时间:2012-08-15 14:58:56

标签: php jquery plugins file-upload blueimp

我一直在使用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?

3 个答案:

答案 0 :(得分:5)

我注意到你和我几乎在同一时间在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'))传递给插件index.php文件,但就像在帖子中一样,它在index.php中不存在(我想是因为上传按钮没有被推送用于重新填充或删除)。这是我第一次使用ajax,但我认为必须以某种方式通过Json发送会话ID。我正在试图解决这个问题。听起来就像Chris G所做的那样。如果有任何帮助我会发布以下问题并提供更多细节:

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

答案 1 :(得分:2)

我的wordpress userdata代码,

<强>之前:

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',

答案 2 :(得分:1)

几条评论 -

。这些帖子是2012/13年度的。更高版本的jQuery文件上传有一个选项,'user_dirs'=&gt; true,将用户标识符插入到存储文件的路径中:(来自UploadHander.php)

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

其中get_user_path返回空字符串,除非user_dirs为真。

。您可以将选项传递给UploadHandler构造函数 - 而不是使用您的首选选项重写UploadHander.php - 在server / php / index.php中,替换

$uploadHandler = new UploadHandler();

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