問題描述
我有使用<input type="file">
的單個檔案上傳的經驗。但是,我無法一次上傳多個。
例如,我想要選擇一系列影像,然後將它們一次性上傳到伺服器。
如果可能,使用單個檔案輸入控制元件將是非常好的。
有誰知道如何完成這個?謝謝!
最佳解決方案
這可以在 HTML5 中。示例 (PHP 5.4):
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="my_file[]" multiple>
<input type="submit" value="Upload">
</form>
<?php
if (isset($_FILES['my_file'])) {
$myFile = $_FILES['my_file'];
$fileCount = count($myFile["name"]);
for ($i = 0; $i < $fileCount; $i++) {
?>
<p>File #<?= $i+1 ?>:</p>
<p>
Name: <?= $myFile["name"][$i] ?><br>
Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
Type: <?= $myFile["type"][$i] ?><br>
Size: <?= $myFile["size"][$i] ?><br>
Error: <?= $myFile["error"][$i] ?><br>
</p>
<?php
}
}
?>
</body>
</html>
在檔案對話方塊中選擇 2 個專案之後,Chrome 在 Chrome 中看起來像這樣:
這是在點選”Upload” 按鈕後的樣子。
這只是一個完整工作答案的草圖。有關在 PHP 中正確,安全地處理檔案上傳的更多資訊,請參閱 PHP Manual: Handling file uploads 。
次佳解決方案
有一些事情你需要做,以建立一個多檔案上傳,其實很基礎。您不需要使用 Java,Ajax,Flash 。只需建立一個正常的檔案上傳形式從開始:
<form enctype="multipart/form-data" action="post_upload.php" method="POST">
那麼成功的關鍵
<input type="file" name="file[]" multiple />
別忘了那些方括號!在 post_upload.php 中嘗試以下操作:
<?php print_r($_FILES['file']['tmp_name']); ?>
請注意,使用 tmp_name 資料獲取陣列,這意味著您可以使用檔案’number’ 示例使用第三對括號訪問每個檔案:
$_FILES['file']['tmp_name'][0]
您可以使用 php count() 來計算所選檔案的數量。 Goodluck widdit!
第三種解決方案
完整的解決方案在 Firefox 5:
<html>
<head>
</head>
<body>
<form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
<input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input>
</form>
<?php
echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>";
$uploadDir = "images/";
for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {
echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
$ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1);
// generate a random new file name to avoid name conflict
$fPath = md5(rand() * time()) . ".$ext";
echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
$result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);
if (strlen($ext) > 0){
echo "Uploaded ". $fPath ." succefully. <br>";
}
}
echo "Upload complete.<br>";
?>
</body>
</html>
第四種方案
如果要從選擇瀏覽時顯示的檔案選擇器對話方塊中選擇多個檔案,那麼大部分都是運氣不好的。您將需要使用 Java 小程式或類似的東西 (我認為有一個使用一個小的 flash 檔案,如果我找到它將更新) 。目前單個檔案輸入僅允許選擇單個檔案。
如果您正在談論使用多個檔案輸入,那麼使用它們之間不應該有太大的區別。釋出一些程式碼,我會盡量幫助進一步。
更新:使用單個’browse’ 按鈕使用快閃記憶體有一種方法。我從來沒有親自使用過這個,但我已經讀了相當多的數量。我認為你最好的一槍。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。