我不是在问如何上传文件。
我只是想知道,当您单击 html 文件元素时,它如何显示本地系统文件夹。
我们可以使用任何其他 html 元素(如按钮和输入)来做到这一点吗?如果不是,文件有什么特别之处?它如何显示系统目录?
我不是在问如何上传文件。
我只是想知道,当您单击 html 文件元素时,它如何显示本地系统文件夹。
我们可以使用任何其他 html 元素(如按钮和输入)来做到这一点吗?如果不是,文件有什么特别之处?它如何显示系统目录?
注意:我不会准确描述浏览器如何处理文件输入,但我将逐步列出我所做的工作及其结果,以便更好地理解输入;虽然它可能无法帮助您了解其内部机制,但它可以帮助您在使用它时不会感到害怕或困惑。在我的实验中,我将使用 HTML、Apache + PHP 和 CakePHP、Firefox 和 Chrome 来比较它在现实世界编程中的使用方式。开始吧 :)
application/x-www-form-urlencoded
并且text/plain
似乎忽略了文件输入;只multipart/form-data
触发浏览器从文件路径读取文件并发送。(要了解更多 enctype 的工作原理,请参阅此处:Enctype='multipart/form-data' 是什么意思?)// Upload 1 file Array ( [<input name in file input tag>] => Array ( [name] => <same as the name of selected to upload file> [type] => <type> [tmp_name] => <path of file in tmp folder will explain below> [error] => <0: error, maybe because of file size too large, 1: success> [size] => <size of file in bytes> ) ) // Upload multiple files (input name must be <someName>[]) Array ( [<input name in file input tag>] => Array ( [name] => [<array of name>] [type] => [<array of type>] [tmp_name] => [<array of tmp path>] [error] => [<array of error>] [size] => [<array of size>] ) )
浏览器向 Apache 发送请求(包含文件);Apache 将请求转发给 PHP;PHP 从请求中提取文件并保存到我们可以在 [tmp_name] 中看到的 tmp 文件夹中的文件。在PHP文件的末尾,它删除了临时文件,所以move_uploaded_file
如果需要保存文件,我们必须在脚本结束之前使用。
onchange
文件输入的事件;通过它的DOM,我们可以访问FileList,然后从它我们可以在File中访问;使用 FileReader(在几乎当前的浏览器中支持)我们可以将其读取为数据 url...(可以在此处查看详细信息:如何在上传之前和之后预览图像?)唯一可以让您访问文件系统的 html 元素是input
(文件类型),因为浏览器允许它显示一个打开的对话框,只有浏览器可以这样做,任何脚本 API 都无法访问系统目录。出于安全原因,目前没有其他方法可以以这种方式访问文件系统(通过对话框);通过 HTML5 在本地保存数据、强制下载保存对话框或打印对话框再次是浏览器控制的操作,但您可以从网页调用它们。