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多文件上传如何实现的更多相关文章

  1. 【thinkPHP5实现文件上传】

    上传文件 ThinkPHP5.0对文件上传的支持更加简单. 内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展. 假设表单代码如下: <form action=" ...

  2. Thinkphp5获取文件上传信息

    Thinkphp5内置有处理文件上传的方法,因在开发文档没有找到获取上传文件基本信息的说明,故在这里做一下记录. $file = request()->file('input类型为file的na ...

  3. ThinkPhp5.0_文件上传

    ===================================================================== 路径: F:\wamp\www\public\uploads ...

  4. thinkphp5实现文件上传

    原理:通过form表单的enctype = "multipart / form-data"属性将文件临时放在htdocs文件夹的tmp目录下,再通过后台的程序将文件保存在自己设定的 ...

  5. thinkphp5.0 实现单文件上传功能

    思路是:在app/ceshi/fire下面有一个index操作方法来渲染显示前端文件,然后前端文件跳转到upload操作方法进行处理,成功显示"文件上传成功",失败显示错误. 首先 ...

  6. thinkphp5文件上传问题

    tp5中文件上传如果没有数据就会报错,所以要先做一个判断 //先接收文件数据 $isfile=$_FILES;//判断是否上传图片数据,如果没有上传数据二位数组中的name会为空,如下例:if($is ...

  7. ThinkPHP5.0图片上传生成缩略图实例代码

    很多朋友遇到这样一个问题,图片上传生成缩略图,很多人在本机(win)测试成功,上传到linux 服务器后错误. 我也遇到同样的问题.网上一查,有无数的人说是服务器临时文件目录权限问题. 几经思考后,发 ...

  8. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

随机推荐

  1. AngularJS 导航栏动态添加.active

    在传统jQuery中,实现导航栏动态添加.active类的思路比较简单,就是当点击的时候,清除其他.active,然后给当前类加上.active. 但是在AngularJS中,就不能再采用这种jQue ...

  2. bootstrap-treeview简单使用

    废话不多说,直接上干干货. 1.bootstrap-treeview Github网址:https://github.com/jonmiles/bootstrap-treeview 2.使用要求: & ...

  3. win10 的MQTT + apache-apollo服务器使用

    我的使用环境是windows10 2.下载文件目录(注意:开始看教程说直接打开bin目录下的apollo.cmd文件,闪退,原因是没有java_home环境,必须添加java环境): 3.安装好jav ...

  4. 微星(MSI)新主板B150M MORTAR U盘装win7的坎坷经历

    新买的微星主板,热心的同事帮忙装好了win10,但是显卡驱动没装好,屏幕都快看瞎了眼,再者,楼主非常不喜欢win10的花哨,所以就装回了win7.下面来说一下我装win7的痛苦经历. 我是用UItra ...

  5. HTML图片映射

    <img>图片映射 <map>与<area>一起使用来定义一个图像映射(一个可点击的链接区域). <img src="cat.jpg" a ...

  6. head---显示文件的开头的内容

    head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容. 语法 head(选项)(参数) 选项 -n<数字>:指定显示头部内容的行数: -c<字符数& ...

  7. 关于memset赋最值

    出处[辗转山河弋流歌 by 空灰冰魂] blog.csdn.net/vmurder/article/details/46537613 memset(a, 0x3f, sizeof(a)) //int, ...

  8. unity 美术注意事项

    有时候美术的一个不小心,就会给程序徒增极大的工作量,所以在项目开始之前是有必要和美术沟通一下,来规范一些东西, 1.将单体模型的轴心置中. 2.模型有父物体时,子物体应相对于父物体的(0,0,0)位置 ...

  9. 洛谷 P1056 排座椅

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...

  10. [Recompose] Stream a React Component from an Ajax Request with RxJS

    Loading data using RxJS is simple using Observable.ajax. This lesson shows you how to take the ajax ...