问题描述
我有使用<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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。