2008-11-09 38 views
4

我想做一个网页,允许在同一时间上传多个文件。我将限制文件扩展名为最常见的图像,如JPG,JPEG,PNG和GIF。多文件上传与PHP/Javascript和没有闪光

我已经做了一些关于这个和每个地方的研究,我看它是闪光灯和闪光灯。

我不想真的使用Flash。尤其是在Flash 10中,它禁用最常用的方法来启用多文件上传。

我在寻找的是一种不断创建更多输入字段的方法,每个输入字段都带有一个浏览按钮,然后在窗体底部有一个最终上传按钮。使用Javascript创建新的输入字段确实非常重要。

所以我想知道这是如何工作的。我是否需要为所有文件输入字段赋予相同的名称属性,以便我可以使用1块PHP代码来解决此问题?或者有没有什么方法可以让PHP检测howmany文件已经被合并,并简单地将解析文件的代码放到for循环中?

回答

2

这里是算法:

您将新的文件输入字段添加到您的表单。每个这个字段必须有一个唯一的名字。然后,在服务器端,循环遍历$ _FILES数组,查看已上载和处理了多少文件。

+0

为了使字段都具有唯一的名称,创建var i = 0会很简单;在Javascript中。然后通过Javascript,将每个字段的名称替换为“name + i ++” – Vordreller 2008-11-09 20:26:50

+2

是的,但是您不需要,因为如果您使用[] – 2008-11-09 20:30:40

12

你可以不断加入“文件”输入,但使用的类似名称“上传[]”

<input type="file" name="upload[]"> 
在$ _FILES

然后[“上传”]你总会有文件的数组可以循环对像

foreach ($_FILES['upload'] as $file) { 
    echo $file['size']; 
} 
+0

后缀名称,PHP将为您处理。所以基本上,PHP将查看名称属性作为数组。这样,我也可以跟踪确切的上传时间:) 而我把它的$文件['大小']'大小'部分是为了我要实现的数字? – Vordreller 2008-11-09 22:34:39

+0

$ file ['size']等同于$ _FILES ['controlname'] ['size'],这仅仅是一个例子。所以$文件将包含你需要处理上传的所有东西 – 2008-11-10 09:37:43

0

在使用JavaScript来添加新的上传域,你也可以有更新JavaScript的一些“隐藏”的输入域的形式上传域的数量。这样,一旦你点击提交,就应该提交该隐藏的值,并且为所有上传的文件解析出$ _FILES数组将是微不足道的。

0

如果您对文件数量有一个合理的最大限制,那么最好在静态表单中包含很多文件上传字段,然后使用JavaScript来隐藏多余的文件,而不是动态创建它们。然后当JavaScript不可用时,表单仍然可以工作。

备注:从技术上讲,单个HTML文件上传表单已经是多种文件上传形式。根据HTML表单编码标准,应该可以在浏览对话框中选择多个文件,并且它们将作为多部分/混合MIME结构提交。

但是,几乎没有任何事实支持这一点。老版本的Opera在客户端(我认为它是一种古老的测试浏览器,可能是Viola),以及服务器端的一些表单解析组件,而不是PHP内置的。在任何情况下,用户界面都不是很好用,所以你不会错过任何东西。