文件上传

最后更新于:2022-04-02 04:29:47

>[danger] 先来看最基本的文件上传表单,以及服务器接收到的数据结构 a.php ~~~ '; print_r($_POST); echo ''; echo '
'; echo '
';
    print_r($_FILES);
    echo '
'; exit; } ?> Document










~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/992ce43b78c6c6e30255b27d67dc0714_314x280.jpg) 点击 提交 : ~~~ Array ( [val] => val [s] => 提交 ) Array ( [logo] => Array ( [name] => QQ图片20161106223133.jpg [type] => image/jpeg [tmp_name] => D:\wamp64\tmp\php92D0.tmp [error] => 0 [size] => 217991 ) [pic] => Array ( [name] => QQ图片20161106223133.jpg [type] => image/jpeg [tmp_name] => D:\wamp64\tmp\php931F.tmp [error] => 0 [size] => 217991 ) [list] => Array ( [name] => Array ( [0] => QQ图片20161106223133.jpg [1] => fdc20716fe1372b0859ec0019d7e6194.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => D:\wamp64\tmp\php932F.tmp [1] => D:\wamp64\tmp\php9350.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 217991 [1] => 6768 ) ) [img-list] => Array ( [name] => Array ( [0] => QQ图片20161106223133.jpg [1] => bg-01.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => D:\wamp64\tmp\php9351.tmp [1] => D:\wamp64\tmp\php9361.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 217991 [1] => 471588 ) ) ) ~~~ **上面就是所有最基本的表单上传,最基本的上传数据结构了。** 文件上传根据类型,可分为两种: - **单文件上传** - 单一字段 - **多文件上传** - 多字段的形式多文件 - 单一字段数组(img[])的形式多文件上传**(这种最复杂,注意这种形式的数据结构)** - 组合多文件(上面几种情况的组合) 参考: [修复Request->file()判断临时文件不严谨导致多文件上传失败的情况](https://github.com/top-think/framework/pull/348) [文件上传那些事儿](https://mp.weixin.qq.com/s/ni_5rZDCOypxtHrVXq1Aww) ### 扩展 ~~~html ~~~ `multiple`是HTML5新增的属性,这个属性可以使上传表单上传时选择多个文件,点击“选择文件”,在弹出系统选择文件窗口中按住`Ctrl`键可以连续选择多个文件,**但是此属性必须配合pic[]数组字段的形式才有作用(注意有些上传插件比如uploadify,这些可以选择多文件上传,此时可能也有这个问题,注意检查上传字段名的设置)**,否则即使选择多个文件,提交到服务器也只有最后一个选择的文件。(所以这个属性可以用来避免以前上传多文件需要多表单,仅一个表单就搞定了) * * * * * ### 其他 对于前端来说,图片上传有以下知识点: - 普通上传 - ajax无刷新文件上传 - 大文件分块上传 - MD5提前校验去重,存在不上传(传到服务端再校验用处不大,只是节省空间,但是并没有节省不必要上传的流量) - 图像压缩上传 - 图像裁剪(放大,缩小,旋转等手势操作) 这些操作以前只有flash才能全部做到,现在html5的新API也能够做到了,不过大部分接口对浏览器的版本要求比较高。 服务端收到文件的方式无非两种: 1. 普通的$\_FIELS 2. base64编码的字符图片$\_POST(非常规Coentent-Type时用`file_get_contents('php://input', 'r')`) **参考:** [php://input - 简单--生活 - 博客园](http://www.cnblogs.com/xiangxiaodong/archive/2012/11/07/2758685.html) [PHP: php:// - Manual](http://php.net/manual/zh/wrappers.php.php) * * * * * [Http 历险记(上)](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513069&idx=1&sn=548c497c46c7c076145064a120c7c101&scene=21#wechat_redirect) [Http历险记(下)-- Struts的秘密](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513080&idx=1&sn=d24a4cdfc71412c581393d584fd91326&scene=21#wechat_redirect) * * * * * last update:2017-8-17 09:45:38
';