jquery-file-upload插件:我可以在运行时设置上传路径吗?

时间:2013-04-05 21:06:16

标签: php jquery jquery-file-upload

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

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

有什么办法可以做到吗?我已经查看了jquery-file-upload文档,但没有提到这样的选项。事实上,也许只是我累了,但是文档似乎非常缺乏。

如果没有办法动态设置上传路径,那么我有一个解决方法就是在上传完成后运行另一个脚本,将文件从硬编码目的地移动到正确的位置,但它只是看起来很傻。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

首先,我将网址参数添加到文件上传器附加到的data-url标记中的input(它应该指向jquery文件上传server/php/子文件夹,其中包含一个index.php文件:

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

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

   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 /选项可能有一种内置方法可以做到这一点,但文档对于你实际可以做的事情非常模糊。