【问题标题】:jquery-file-upload plugin: Can I set upload path at runtime?jquery-file-upload 插件:我可以在运行时设置上传路径吗?
【发布时间】:2013-04-05 21:06:16
【问题描述】:

我发现其他帖子讨论了更改 jquery-file-upload 插件的上传路径。但是,答案通常涉及将其硬编码到upload.class.php 文件中。

我知道该怎么做,但问题是,会有多个用户上传多个需要转到不同文件夹的文件。我需要能够动态设置文件的目标路径。

有什么办法可以做到吗?我已经查看了 jquery-file-upload 文档并且没有提到这样的选项。其实可能只是我累了,反正文档好像很缺。

如果没有办法动态设置上传路径,那么我的一个解决方法是在上传完成后运行另一个脚本,将文件从硬编码的目标移动到正确的位置,但它只是不得不这样做似乎很愚蠢。

【问题讨论】:

    标签: php jquery jquery-file-upload


    【解决方案1】:

    好主意,但您不必破解upload.class.php,您可以通过传入这样的数组来覆盖选项:

    $upload_dir = '/some/other/directory/';
    $options = array('upload_dir' => $upload_dir);
    $upload_handler = new UploadHandler($options);
    

    【讨论】:

    • 是的,正确。既然已经实现了参数/选项扩展覆盖,为什么还要麻烦添加代码?查看 UploadHandler 类的构造函数: if ($options) { $this->options = array_merge($this->options, $options); }
    【解决方案2】:

    这是我最终得到的解决方案。

    首先,我在文件上传器所附加的input标签中的data-url中添加了URL参数(它应该指向jquery文件上传server/php/子文件夹,其中包含一个index.php文件) :

    <input type="file" name="files[]" data-url="/jquery-file-upload/server/php/?type=a">
    

    然后我在data-url 指向的index.php 文件中使用了SWITCH 语句:

       switch ($_GET["type"]) {
    
        case "a":
            $upload_dir = '/custom/folder/here/';
            $upload_url = '/custom/folder/here';
            $allowed_exts = '/\.(jpg|jpeg|gif|png)$/i';
            break;
    
        case "b":
            // you get the idea
            break;
    
        default:
            $upload_dir = dirname($_SERVER['SCRIPT_FILENAME']).'/files/';
            $allowed_exts = '/.+$/i';
            break;
    }   
    

    最后,在upload.class.php 文件中,我根据我想使用SWITCH 自定义的值修改了相应的行:

        function __construct($options = null, $initialize = true) {
            $this->options = array(
            'script_url' => $this->get_full_url().'/',
            'upload_dir' => $GLOBALS["upload_dir"],
            'upload_url' => $GLOBALS["upload_url"],
            'user_dirs' => false,
            'mkdir_mode' => 0755,
            'param_name' => 'files',
            'delete_type' => 'DELETE',
            'access_control_allow_origin' => '*',
            'download_via_php' => false,
            'inline_file_types' => '/\.(gif|jpe?g|png)$/i',
            'accept_file_types' => $GLOBALS["allowed_exts"],
            ...etc
    

    我在SWITCH 中定义的变量在这里用作`$GLOBALS["varname"],以便可以在类中使用它们。

    我希望这能够帮助某人。每个人的情况会有所不同,所以我不建议完全复制和粘贴此代码。我只是想说明基本概念。

    注意:“upload_dir”是 ROOT 路径,“upload_url”是公共路径。

    另请注意:正如您在我的示例中看到的那样,我也使用此方法来根据条件确定允许哪些文件类型。

    可能有一种内置方法可以通过文件上传器 API/Options 执行此操作,但文档对您实际可以做什么非常模糊。

    【讨论】:

    • 您好,感谢您的贡献。我有同样的问题,我的意思是:我不知道如何通过 index.php 获得 ?type=a。我想要一个基本页面,询问您要在哪个文件夹中上传图片...当您通过单击链接选择哪个文件夹时...我需要对上传者说以获取参数所以以这种方式在 index.php 中我可以切换...但我无法获取参数的值 ?type...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多