【翻译】多文件上传

多文件上传
以往我打算是实现同时上传多个文件,会使用多个"file"表单元素,这是令人讨厌的,效率低下(译者注:用户需要一个文件一个文件地选择),但我无法想象我如果不使用它的话,我的用户会怎么样。很幸运,Safari, Chrome和firefox 现在已经实现了使用一个file表单元素就能完成完成多文件上传的方法。
查看DEMO
HTML
<form method="post" action="upload-page.php" enctype="multipart/form-data"> <!-- 译者注:注意這個multiple属性和name属性 --> <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" /> </form> <br/>
简单的给file 表单元素添加一个muliple属性就允许多文件上传了。(译者注:multiple的值的作用不清楚,原文的意思大概是可以添加验证功能)
Listing Multiple Files with JavaScript
//get the input and UL list var input = document.getElementById('filesToUpload'); var list = document.getElementById('fileList'); //清空列表 while (list.hasChildNodes()) { list.removeChild(ul.firstChild); } //遍历每一个选择上传的文件 for (var x = 0; x < input.files.length; x++) { //add to list var li = document.createElement('li'); li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name; list.append(li); }
file表单元素的files属性是一个数组,所以可以通过length属性可以知道用户选择的文件。可以遍历得到每一个文件的路径(path)和名称(name)。
Receiving and Handling Files with PHP
使用PHP接收并处理文件
if(count($_FILES['uploads']['filesToUpload'])) { foreach ($_FILES['uploads']['filesToUpload'] as $file) { // 你可以在处理图片 echo $file; } }
PHP根据表单的那么属性创建了一个文件数组。
当然,你也可以在IE和opera中通过flash实现多文件上传,可是想这样要另外的组件支持始终不是什么好主意。希望这些浏览器快点支持多文件上传吧!
by 译者
评论中以外发现一个flash上传的jquery插件http://www.uploadify.com/,这段时间在弄大文件上传的处理方式,是使用swfupload这个组件实现的。
记录一下这个uploadify, 以后也许用得着:)
PHP中设置文件上传大小限制
PHP中有三个配置项是控制上传相关的:
memory_limit
post_max_size
upload_max_filesize
其中只有memory_limit可以在脚本中动设置
ini_set(‘memory_limit’, ‘60M’); // 可成功设置 ini_set(‘post_max_size’, ‘40M’); // 失败 ini_set(‘upload_max_filesize’, ‘40M’); // 失败
还可以通过.htaccess文件设置:
php_value memory_limit 60M
php_value post_max_size 40M
php_value upload_max_filesize 40M
当然,还可以直接php.ini中配置