2

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

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

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

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

4

2 回答 2

3

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

$upload_dir = '/some/other/directory/';
$options = array('upload_dir' => $upload_dir);
$upload_handler = new UploadHandler($options);
于 2013-06-18T20:26:54.973 回答
2

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

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

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

然后,我在文件中使用了指向的SWITCH语句:index.phpdata-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”是根路径,“upload_url”是公共路径。

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

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

于 2013-04-10T04:07:45.997 回答