我会说设置一些 FTP 空间或 WebDAV 共享。如果您不能这样做,那么我会将图像上传到单个(或少量)zip 文件中,而不是尝试处理数百个独特的上传,这将非常耗时,因为浏览器只会选择一个文件在文件上传对话框中一次(即您不能只选择要上传的整个目录)。
为什么不在这种情况下使用 PHP:
在 PHP 中编写一个简单的文件上传处理程序很容易,但如果您确实想要处理非常大的上传,那就有点棘手了,因为您需要警惕文件大小上传限制、脚本执行时间限制和内存限制。第一次设置可能有点令人沮丧。
如果它是您要处理的多 GB 文件,那么 HTTP 上传不是您想要的方式(基于,如果您不得不问为什么,让它按您的意愿工作可能对您来说是一个非常令人沮丧的过程)。
Mac OS 上有几个优秀的 FTP 客户端,没有理由相信 Web 浏览器是比 FTP 客户端更好的文件传输方法。
关于进度条支持:
目前 PHP 中的进度条支持非常有限(目前仅通过有点毛茸茸的 3rd 方模块),尽管我相信有计划将该模块包含在标准发行版中。谷歌搜索 uploadprogress.so 应该会给出一些相关的结果。
回复小绿:
我使用了这个扩展http://pecl.php.net/package/uploadprogress(它设法与我已经安装的至少一个扩展发生冲突 - 尽管我认为他们现在已经解决了这个问题)并编写了一个自定义 javascript 处理程序(http ://iaincollins.com/javascript/FileUploader.js) 基于网络上的一些多个示例,努力将每个示例中的精华融合在一起。例如,使用不可见的 iframe 透明地返回上传进度,创建 DHTML 文件上传对话框并通过使其透明并将其覆盖在我自己的控件之上来替换丑陋的基于浏览器的文件上传控件(所以它仍然是可点击的,因为你无法从 JavaScript 调用文件上传对话框,尽管您可以获得已选择上传的文件的名称)。获得正确的 CSS 样式对此尤其重要——它是特定于浏览器的。
遗憾的是,我写的 JS 是针对特定情况的,但它可能有一些有用的元素 - 抱歉,我没有可以链接到的任何公共内容,因为它是为私有接口创建的。
我看到现在有一个用于 uploadprogress 的 jQuery 插件 - 它并不能做所有事情,但这将是一个好的开始: http: //nixbox.com/demos/jquery-uploadprogress.php ...我记得有更好的例子在那里,包括一个处理多个文件上传的文件(通过排队并按顺序执行它们 - 您仍然必须一次选择一个文件)但不幸的是我似乎找不到它们。
结论:
除非您有时间,否则我会尽量避免麻烦并做一些类似 FTP 空间或私人/点对点文件传输应用程序的事情。
文件传输协议(顾名思义)专为大型文件传输而设计,是一个更好的选择,因为它需要很少的配置(您不会遇到资源限制)并且您可以合理地期望客户端具有 FTP 恢复支持,假设您的服务器确实如此(即,如果下载停止,他们应该能够轻松地从中断的地方恢复它,而不是像处理基于 PHP 文件的 HTTP 上传那样从头开始)。
虽然 HTTP 具有处理上传文件的能力,但它不是那么健壮,并且需要显式配置各种资源限制(在 Web 服务器和 PHP 中 - 如上所述)以使上传多 GB 文件成为可能。即使使用 WebDAV(使用 HTTP 服务器远程文件系统),它也是透明的,但它往往不如 FTP 强大,主要是由于客户端实现存在错误 - 特别是在 Windows 和 Mac OS 上传输非常大的文件时可能会出现问题,尽管它通常适用于小型(例如 <500 MB)文件传输。
附带说明一下,HTML5 规范将改进文件上传的处理方式——一次上传多个文件的可能性,并将文件上传进度作为规范的一部分,但目前它并不是一个真正的选择。