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. luogu 3393 逃离僵尸岛

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  2. AngularJs轻松入门(二)数据绑定

    数据绑定是AngularJs中非常重要的特性,我们看一下下面的例子: <!DOCTYPE html> <html ng-app> <head lang="en& ...

  3. <Sicily>Funny Game

    一.题目描述 Two players, Singa and Suny, play, starting with two natural numbers. Singa, the first player ...

  4. UI Framework-1: Aura Multi-desktop

    Multi-desktop Aura now makes it possible for the same browser process to render to multiple desktops ...

  5. UI Framework-1: Browser Window

    Browser Window The Chromium browser window is represented by several objects, some of which are incl ...

  6. mysql的关联查询简写

    平常的内连接查询: SELECT * from ab_style as a INNER JOIN ab_url as b on a.style_bold=b.url_id 可支持简写风格: selec ...

  7. NodeJS学习笔记 (29)二进制解码-string_decoder(ok)

    原文:https://github.com/chyingp/nodejs-learning-guide 自己过一遍: 模块简介 string_decoder模块用于将Buffer转成对应的字符串.使用 ...

  8. CF620E New Year Tree(线段树+二进制)

    题解 弱智题,二进制表示位数.合并时用| 就是被1<<x卡了好久. 要写成1ll<<x才行 #include<iostream> #include<cstri ...

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

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

  10. 紫书 例题 10-10 UVa 10491(概率计算)

    公式很好推,表示被高中生物遗传概率计算虐过的人 这个公式简直不需要动脑 #include<cstdio> using namespace std; int main() { double ...