2013-04-05 41 views
2

我發現其他文章談論改變jQuery文件上傳插件的上傳路徑。但是,答案通常涉及將其硬編碼到upload.class.php文件中。jquery-file-upload插件:我可以在運行時設置上傳路徑嗎?

我知道如何做到這一點,但事情是,將有多個用戶上傳多個文件,需要去不同的文件夾。我需要能夠動態設置文件的目標路徑。

這有什麼辦法可以做到嗎?我已經瀏覽了jquery-file-upload文檔,並沒有提及這樣的選項。事實上,也許這只是我累了,但文件似乎是非常缺乏。

如果沒有辦法動態設置上傳路徑,那麼我有一個解決方法的想法是在上傳完成後運行另一個腳本,該腳本會將文件從硬編碼目標移動到正確的位置,但它看起來很愚蠢,必須這樣做。

回答

2

這是我終於結束的解決方案。

首先,我添加URL參數的data-url,該文件上傳連接到input標籤(其應指向jQuery的文件上傳server/php/子文件夾,其中包含一個index.php文件):

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

然後我在index.php文件中使用一個SWITCH聲明中表示,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/Options可能有一種內置的方法來完成此操作,但文檔對於您實際上可以做什麼非常模糊。

+0

你好感謝你的貢獻。我有同樣的問題,我的意思是:我不知道我怎麼能得到?type = a的index.php。我想有一個基本頁面,詢問您要在哪個文件夾中上傳圖片...當您通過點擊鏈接選擇哪個文件夾...我需要對上傳者說,以這種方式獲取參數在index.php我可以切換...但我無法獲得參數的值?type ... – 2014-04-17 22:07:28

3

好主意,但你不必破解upload.class.php,你可以通過在一個陣列通過這樣的覆蓋選項:

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

是的。爲什麼在已經實現了params/options擴展覆蓋的情況下添加代碼會有困擾? 看看UploadHandler類的構造函數: if($ options){this-> options = array_merge($ this-> options,$ options); } – kante 2013-07-04 09:21:56

相關問題