thinkphp5多文件上传如何实现
thinkphp5多文件上传如何实现
一、总结
一句话总结:官方文档,测试一下,一定要测试,打印中间变量,就知道每句话是什么意思,一定要测试一下。又简单有快。
测试一下,你就能确定中间变量和你的是不是一样,你是不是可以照着他的方法弄
1、框架或者插件遇到不懂的语句而又一定要用怎么办?
测试,打印中间变量,就比较轻松了
2、单文件上传和多文件上传混合在一起的上传怎么解决?
单文件上传和多文件上传混合在一起(循环解决),多文件上传部分单独处理(选择结构)
照着手册整,可以省好多事
不懂的语句打印中间结果
1 //2、获取传入的文件数据
2 foreach ($_FILES as $key=>$val){
3 if($_FILES[$key]['tmp_name']){
4 // 获取表单上传文件 例如上传了001.jpg
5 $file = request()->file($key);
6 if($key=='a_content_pic3'){//多图上传的情况
7 //不用拆,官方文档有怎么用
8 $files=$file;
9 $data[$key]=null;
10 foreach($files as $perFile){
11 // 移动到框架应用根目录/public/uploads/ 目录下
12 $info = $perFile->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
13 $data[$key].='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName().',';
14 }
15 }else{
16 // 移动到框架应用根目录/public/uploads/ 目录下
17 $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
18 // 已经上传成功,我们要把文件的路径写进数据库
19 $data[$key]='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName();
20 }
21 }
22 }
二、thinkphp5多文件上传如何实现
1、多文件上传代码
如果你使用的是多文件上传表单,例如:
<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image[]" /> <br>
<input type="file" name="image[]" /> <br>
<input type="file" name="image[]" /> <br>
<input type="submit" value="上传" />
</form>
控制器代码可以改成:
public function upload(){
// 获取表单上传文件
$files = request()->file('image');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 jpg
echo $info->getExtension();
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
上传界面如下:

2、上传过程中dump($_FILES);的值如下

3、上传成功的返回信息如下
其实也就是下面代码的输出结果
echo $info->getExtension();
echo "<br>";
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
echo "<br>";

三、复杂结构数据的多文件上传
1、上传过程中部分dump($_FILES);的值如下

结构特点是单文件上传和多文件上传混合在一起(循环解决),多文件上传部分单独处理(选择结构)
2、核心代码
//2、获取传入的文件数据
foreach ($_FILES as $key=>$val){
if($_FILES[$key]['tmp_name']){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file($key);
if($key=='a_content_pic3'){//多图上传的情况
//不用拆,官方文档有怎么用
$files=$file;
$data[$key]=null;
foreach($files as $perFile){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $perFile->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
$data[$key].='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName().',';
}
}else{
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
// 已经上传成功,我们要把文件的路径写进数据库
$data[$key]='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName();
}
}
}
3、上传好了的结果数据
array(11) {
["a_type"] => string(1) "2"
["a_title"] => string(5) "33333"
["a_brief"] => string(11) "33333333333"
["a_content_art1"] => string(0) ""
["a_create_time"] => int(1535563492)
["a_update_time"] => int(1535563492)
["a_authorid"] => string(2) "33"
["a_g_id"] => int(17)
["a_jieduan_id"] => string(1) "1"
["a_picture"] => string(81) "/static/uploads/student/note/engage/20180830\dd2c9ae77b8c2c1f764d98ee86dcfb71.png"
["a_content_pic3"] => string(164) "/static/uploads/student/note/engage/20180830\f972fe240bc0d315ae0e3f5fadd31486.jpg,/static/uploads/student/note/engage/20180830\71646f316808c0cd057813086c76554c.jpg,"
}
thinkphp5多文件上传如何实现的更多相关文章
- 【thinkPHP5实现文件上传】
上传文件 ThinkPHP5.0对文件上传的支持更加简单. 内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展. 假设表单代码如下: <form action=" ...
- Thinkphp5获取文件上传信息
Thinkphp5内置有处理文件上传的方法,因在开发文档没有找到获取上传文件基本信息的说明,故在这里做一下记录. $file = request()->file('input类型为file的na ...
- ThinkPhp5.0_文件上传
===================================================================== 路径: F:\wamp\www\public\uploads ...
- thinkphp5实现文件上传
原理:通过form表单的enctype = "multipart / form-data"属性将文件临时放在htdocs文件夹的tmp目录下,再通过后台的程序将文件保存在自己设定的 ...
- thinkphp5.0 实现单文件上传功能
思路是:在app/ceshi/fire下面有一个index操作方法来渲染显示前端文件,然后前端文件跳转到upload操作方法进行处理,成功显示"文件上传成功",失败显示错误. 首先 ...
- thinkphp5文件上传问题
tp5中文件上传如果没有数据就会报错,所以要先做一个判断 //先接收文件数据 $isfile=$_FILES;//判断是否上传图片数据,如果没有上传数据二位数组中的name会为空,如下例:if($is ...
- ThinkPHP5.0图片上传生成缩略图实例代码
很多朋友遇到这样一个问题,图片上传生成缩略图,很多人在本机(win)测试成功,上传到linux 服务器后错误. 我也遇到同样的问题.网上一查,有无数的人说是服务器临时文件目录权限问题. 几经思考后,发 ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
随机推荐
- Kali linux 2016.2(Rolling)中的Nmap的端口扫描功能
不多说,直接上干货! 如下,是使用Nmap对主机202.193.58.13进行一次端口扫描的结果,其中使用 root@kali:~# nmap -sS -Pn 202.193.58.13 Starti ...
- HBase框架基础(四)
* HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进 ...
- Webfont 的兼容性问题[持续更新]
低版安卓手机的 webview 显示不了,另外黑莓手机显示出来是这样: 生成工具: 离线字体生成工具:webfont 在线字体生成平台:icomoon.io, iconfont.cn均有问题 其他一些 ...
- 关于node的聊天室错误
Deprecationwarning:process,EventEmitter is deprecated use require ('events')instead 关于node的聊天室错误 > ...
- 请问这个git上开源的node项目怎样才能在windows用Npm跑起来
这个项目https://github.com/wechaty/we...以前都是用人家弄好的手脚架搞得es6,搞了2天搞起了es6还报错,错误信息在下面,然后我想请教大神:1我到底应该怎么弄才能在wi ...
- hdu1864/2844/2159 背包基础题
hdu1864 01背包 题目链接 题目大意:一堆数,找到一个最大的和满足这个和不超过Q要学会分析复杂度! #include <cstdio> #include <cstring&g ...
- 5、Go if else 条件判断
package main import "fmt" func main(){ //注:在Go里面没有三元表达式”?:”,所以你只能使用条件判断语句. //示例一 if 7%2==0 ...
- POJ-1001 Exponentiation 高精度算法
题目链接:https://cn.vjudge.net/problem/POJ-1001 以前写过一个高精度乘法,但是没有小数点,实现起来也没什么难得, 现在把代码都般过来,等会把旧电脑弄一弄,暂时就不 ...
- CF546E Soldier and Traveling(网络流,最大流)
CF546E Soldier and Traveling 题目描述 In the country there are \(n\) cities and \(m\) bidirectional road ...
- Opencv Mat的三种常用类型简介
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47683127 本文主要介绍Opencv ...