2015-07-20 222 views
2

我想讓用戶通過點擊上傳按鈕來選擇文件夾。提交時,我想從文件夾(遞歸地)檢索所有文件名,而無需上傳任何文件或文件夾。從文件夾獲取文件名

例, 比方說有一個與下面的文件夾結構文件夾名稱測試:
測試
- 1.txt的
- 2.pdf
- 3.avi
- Test2的(文件夾,包含多個文件)
- 4.mp4

在上點擊上傳按鈕選擇測試文件夾,輸出應該是: 的1.txt,2.pdf,3.avi,Test2的(文件名的此文件夾內的文件),4.mp4

我不需要獲取文件內的內容,只是文件名。

我應該怎麼做? 我知道有鍍鉻的WebKit目錄允許上傳文件夾的文件名
上面的代碼

<?php 
$count = 0; 
$name2 = array(); 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
foreach ($_FILES['files']['name'] as $i => $name) { 
    if (strlen($_FILES['files']['name'][$i]) > 1) { 
     $count++; 

     array_push($name2, $_FILES['files']['name'][$i]); 
    } 
} 
} 
?> 

<!DOCTYPE HTML> 
 
<html> 
 

 
<body> 
 
    <form method="post" enctype="multipart/form-data"> 
 
    <input type="file" name="files[]" id="files" multiple="" directory="" webkitdirectory="" mozdirectory=""> 
 
    <input class="button" type="submit" value="Upload" /> 
 
    </form> 
 
</body> 
 

 
</html>

$名2陣列返回列表的視頻文件不起作用,是與其他瀏覽器不兼容。

有沒有其他方法可以做到這一點?

+0

這與python有什麼關係? –

回答

0

PHP爲您提供了一個名爲filesystemiterator的對象,旨在幫助您循環遍歷指定的文件夾。在你的情況,我會做一個遞歸函數,應該是這樣的:

function readFolder($folder) 
{ 
    $retArray = array(); 
    $folder = new FilesystemIterator("path/to/folder", FilesystemIterator::SKIP_DOTS); 
    foreach($folder as $file) 
    { 
     if(is_dir($file->getPathname()) 
      $retArray[] = readFolder($file->getPathname()); 
     else 
      $retArray[] = $file->getFilename(); 
    } 

    return $retArray; 
} 

什麼是這一切美好的是,getPathname()方法,而如果你只是想名字返回文件的完整路徑的文件,你可以使用getFilename()方法。下面是該文檔的鏈接上PHP的網站:

http://php.net/manual/en/class.filesystemiterator.php

此外,爲了安全起見,現代Web瀏覽器不,當你使用「文件」輸入類型包括完整的文件路徑。

+0

這不起作用,因爲它只能訪問服務器文件系統,我相信umang需要用戶能夠在客戶端選擇文件夾。 –

+0

你想讓你的服務器訪問遠程計算機?是不是那種...侵入? – Osuwariboy

+0

@Osuwariboy爲什麼它是侵入性的?它與上傳文件夾相同,由文件名組成,用戶可以選擇是否上傳。 – umang