3

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

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

这是上传类的构造函数:

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

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

4

3 回答 3

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

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

于 2012-08-16T00:41:07.750 回答
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',
于 2013-03-13T17:40:37.037 回答
1

一些评论——

. 这些职位来自 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;
}

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

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

$uploadHandler = new UploadHandler();

$uploadHandler = new UploadHandler(array('option1' => value,
                                         'option2' => value));
于 2018-04-01T00:14:58.660 回答