我找到了其他帖子,讨论如何更改jquery-file-upload插件的上传路径。但是,答案通常涉及将其硬编码到upload.class.php
文件中。
我知道如何做到这一点,但问题是,会有多个用户上传需要转到不同文件夹的多个文件。我需要能够动态设置文件的目标路径。
有什么办法可以做到吗?我已经查看了jquery-file-upload文档,但没有提到这样的选项。事实上,也许只是我累了,但是文档似乎非常缺乏。
如果没有办法动态设置上传路径,那么我有一个解决方法就是在上传完成后运行另一个脚本,将文件从硬编码目的地移动到正确的位置,但它只是看起来很傻。
答案 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 /选项可能有一种内置方法可以做到这一点,但文档对于你实际可以做的事情非常模糊。