欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

ThinkPHP3.1快速入门(19)文件上传

shiping1 的头像

获取上传类

ThinkPHP的扩展中提供了文件上传类库UploadFile,可以在在http://www.thinkphp.cn/extend/224.html下载,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含上传扩展类了。如果是单独下载的上传类库,把解压后的UploadFile.class.php 放入ThinkPHP/Extend/Library/ORG/Net/(如果没有请手动创建)目录下面。
最新版本的上传类包含的功能如下(有些功能需要结合ThinkPHP系统其他类库):
  • 基本上传功能
  • 支持批量上传
  • 支持生成图片缩略图
  • 自定义参数上传
  • 上传检测(包括大小、后缀和类型)
  • 支持覆盖方式上传
  • 支持上传类型、附件大小、上传路径定义
  • 支持哈希或者日期子目录保存上传文件
  • 支持动态定义子目录保存文件
  • 上传图片的安全性检测
  • 支持上传文件命名规则
  • 支持对上传文件的Hash验证
如果你需要使用上传图片生成缩略图功能的话,还需要下载图像处理扩展类http://www.thinkphp.cn/extend/225.html,解压后的Image.class.php放入ThinkPHP/Extend/Library/ORG/Util/目录下面。

上传表单

上传表单无需特别处理,下面是一个最简单的单文件上传表单:
  1. <form id="upload" method='post' action="!-URL-!/upload/" enctype="multipart/form-data">
  2.  <input name="image" type="file" />
  3.  <input type="submit" value="提交" >
  4.  </form>
复制代码
 
注意,表单必须添加enctype="multipart/form-data"属性才能支持文件上传功能。

上传操作

接下来就是定义上传操作了,我们在Action控制器中添加upload操作方法如下:
  1. // 文件上传
  2.  public function upload() {
  3.     import('ORG.Net.UploadFile');
  4.     $upload = new UploadFile();// 实例化上传类
  5.     $upload->maxSize  = 3145728 ;// 设置附件上传大小
  6.     $upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
  7.     $upload->savePath =  './Public/Uploads/';// 设置附件上传目录
  8.     if(!$upload->upload()) {// 上传错误提示错误信息
  9.         $this->error($upload->getErrorMsg());
  10.     }else{// 上传成功
  11.         $this->success('上传成功!');
  12.     }
  13.  }
复制代码
 
系统提供的文件上传类对图片文件的上传安全做了支持,如果企图上传非法的图像文件,系统会提示“非法图像文件”。

参数设置

要使用上传功能,首先第一步就是实例化上传类:
  1.     import('ORG.Net.UploadFile');
  2.     $upload = new UploadFile();// 实例化上传类
复制代码
 
接下来,就是设置上传属性(参数),支持的上传参数有:
maxSize文件上传的最大文件大小(以字节为单位)默认为-1 不限大小
savePath文件保存路径(必须)
saveRule上传文件的保存规则,必须是一个无需任何参数的函数名,例如可以是 time、 uniqid com_create_guid 等,但必须能保证生成的文件名是唯一的,默认是uniqid
hashType上传文件的哈希验证方法,默认是md5_file
autoCheck是否自动检测附件,默认为自动检测
uploadReplace存在同名文件是否是覆盖
allowExts允许上传的文件后缀(留空为不限制),使用数组设置,默认为空数组
allowTypes允许上传的文件类型(留空为不限制),使用数组设置,默认为空数组
thumb是否需要对图片文件进行缩略图处理,默认为false
thumbMaxWidth缩略图的最大宽度,多个使用逗号分隔
thumbMaxHeight缩略图的最大高度,多个使用逗号分隔
thumbPrefix缩略图的文件前缀,默认为thumb_
thumbSuffix缩略图的文件后缀,默认为空
thumbPath缩略图的保存路径,留空的话取文件上传目录本身
thumbFile指定缩略图的文件名
thumbExt指定缩略图的扩展名
thumbRemoveOrigin生成缩略图后是否删除原图
autoSub是否使用子目录保存上传文件
subType子目录创建方式,默认为hash,可以设置为hash、date或者custom
subDir子目录名称 subType为custom方式后有效
dateFormat子目录方式为date的时候指定日期格式
hashLevel子目录保存的层次,默认为一层
上传参数的设置方法如下:
  1.  //设置附件上传目录
  2. $upload->savePath = './Uploads/';
  3.  //设置需要生成缩略图,仅对图像文件有效
  4. $upload->thumb = true;
  5.  //设置需要生成缩略图的文件后缀
  6. $upload->thumbPrefix = 'm_,s_';  //生产2张缩略图
  7.  //设置缩略图最大宽度
  8. $upload->thumbMaxWidth = '200,50';
  9.  //设置缩略图最大高度
  10. $upload->thumbMaxHeight = '200,50';
复制代码
 
另外一种方式是,在实例化的同时传入上传参数,例如:
  1. import('ORG.Net.UploadFile');
  2. $config['savePath'] = './Uploads/';
  3. $config['thumb'] = true;
  4. $config['thumbPrefix'] = 'm_,s_';
  5. $config['thumbMaxWidth'] = '200,50';
  6. $config['thumbMaxHeight'] = '200,50';
  7. $upload = new UploadFile($config);// 实例化上传类并传入参数
复制代码
 
无论采用何种方式,设置好上传的参数后,就可以调用UploadFile类的upload方法进行附件上传,如果失败,返回false,并且用getErrorMsg方法获取错误提示信息;如果上传成功,可以通过调用getUploadFileInfo方法获取成功上传的附件信息列表。getUploadFileInfo方法的返回值是一个二维数组,其中的每个元素就是上传的附件信息。每个附件信息又是一个记录了下面信息的数组,包括:
key附件上传的表单名称
savepath上传文件的保存路径
name上传文件的原始名称
savename上传文件的保存名称
size上传文件的大小
type上传文件的MIME类型
extension上传文件的后缀类型
hash上传文件的哈希验证字符串
文件上传成功后,就可以通过这些附件信息来进行其他的数据存取操作,例如保存到当前数据表或者单独的附件数据表都可以。
例如,下面表示把上传信息保存到数据表的字段:
  1. //取得成功上传的文件信息
  2. $info = $upload->getUploadFileInfo();
  3. $model = M('Photo');
  4.  //保存当前数据对象
  5. $data['image'] = $info[0]['savename'];
  6. $data['create_time'] = NOW_TIME;
  7. $model->add($data);
复制代码
 
官网示例中的图像上传示例可以查看上传和显示效果:


多文件上传

上传类默认就支持多文件上传,只需要修改表单页面:
如果需要使用多个文件上传,只需要修改表单,把
  1. <input type='file'  name='image'>
复制代码
 
改为
  1. <input type='file'  name='image1'>
  2.  <input type='file'  name='image2'>
  3.  <input type='file'  name='image3'>
复制代码
 
或者
<input type='file' name='image[]'>
<input type='file' name='image[]'>
<input type='file' name='image[]'>
两种方式的多附件上传表单文件上传类都可以自动识别。
上传成功后,还是使用getUploadFileInfo方法获取成功上传的附件信息。

单个上传

上传类还提供了单个上传的方法
  1. import("ORG.Net.UploadFile");
  2. $upload = new UploadFile();
  3.  foreach ($_FILES as $key=>$file){
  4.     if(!empty($file['name'])) {
  5.         $upload->autoSub = true;
  6.         $upload->subType   =  'date';
  7.         $info =  $upload->uploadOne($file);
  8.         if($info){ // 保存附件信息
  9.             M('Photo')->add($info);
  10.         }else{ // 上传错误
  11.             $this->error($upload->getErrorMsg());
  12.         }
  13.     }
  14.  }
复制代码
 
uploadOne方法表示每次执行只上传指定的一个文件,并且如果上传成功的话uploadOne方法的返回值就是成功上传的文件信息,和getUploadFileInfo方法不同的是,这个文件信息是一个仅包含单个文件信息的一维数组。如果发生错误,依然是通过getErrorMsg方法获取错误信息。

上传文件的命名规范

上传文件的命名规范用于确保文件不会产生冲突或者覆盖的情况。而命名规范的定义又需要根据你的业务逻辑来调整,不是固定的。例如,如果你采用时间戳的方式来定义命名规范,那么在同时上传多个文件的时候可能产生冲突(因为同一秒内可以上传多个文件),因此你需要根据你的业务需求来设置合适的上传命名规则。这里顺便来说下saveRule参数的具体用法。
一、采用函数方式
如果传入的字符串是一个函数名,那么表示采用函数动态生成上传文件名(不包括文件后缀),例如:
  1. $upload->saveRule = 'time'; // 采用时间戳命名
复制代码
 
  1. $upload->saveRule = 'com_create_guid'; // 采用GUID序列命名
复制代码
 
也可以采用用户自定义函数:
  1. $upload->saveRule = 'myfun'; // 采用自定义函数命名
复制代码
 
二、直接设置上传文件名
如果传入的参数不是一个函数名,那么就会直接当做是上传文件名,例如:
  1. $upload->saveRule = time().'_'.mt_rand();
复制代码
 
三、保持上传文件名不变
如果你想保持上传的文件名不变,那么只需要设置命名规范为空即可,例如:
  1. $upload->saveRule = '';
复制代码
 
一般来说不建议保持不变,因为会导致相同的文件名上传后被覆盖的情况。

子目录保存

saveRule只是用于设置文件的保存规则,不涉及到目录,如果希望采用子目录保存上传文件,可以使用下面的三种方式设置子目录:
一、哈希子目录
  1. $upload->subType = 'hash';
  2. $upload->hashLevel = 2;
复制代码
 
设置后,会自动对上传文件进行哈希编码后的第一个和第二个字母分别作为一级和二级子目录名称保存。如果hashLevel不设置,则默认为一级子目录。
二、日期子目录
这种方式也比较常用,用日期作为子目录名称,
  1. $upload->subType = 'date';
  2. $upload->dateFormat = 'Y-m-d';
复制代码
 
dateFormat参数则用于配合设置日期的格式,如果不设置,则默认为Ymd。
三、自定义子目录
这种方式作为一种更灵活的子目录保存方式,是最新添加的功能支持。
  1. $upload->subType = 'custom';
  2. $upload->subDir = get_user_id();
复制代码
 
自定义子目录方式的优势在于,可以动态设置子目录名称,上面的定义就采用了当前用户ID作为子目录名称。

生成缩略图

缩略图功能需要Image扩展类的支持,所以确保你已经有了这个扩展类。
然后设置如下参数:
  1. //设置需要生成缩略图,仅对图像文件有效
  2. $upload->thumb = true;
  3.  //设置需要生成缩略图的文件前缀
  4. $upload->thumbPrefix = 'm_,s_';  //生产2张缩略图
  5.  //设置缩略图最大宽度
  6. $upload->thumbMaxWidth = '200,50';
  7.  //设置缩略图最大高度
  8. $upload->thumbMaxHeight = '200,50';
  9.  //设置生成缩略图后移除原图
  10. $upload->thumbRemoveOrigin = true;
复制代码
 
缩略图的前(后)缀数量必须和宽度数量对应,表示生成多个缩略图。
生成的缩略图默认位于保存文件的实际所在目录(包括子目录的情况),当然你也可以指定统一的缩略图保存路径,例如:
  1. $upload->thumbPath = './Uploads/thumb/';
复制代码
 
这里的thumbPath参数必须用“/”结尾。
我们可以设置缩略图采用统一的文件后缀,例如:
  1. // 设置缩略图的固定后缀
  2. $upload->thumbExt = 'jpg';
复制代码
 
更多的上传类用法可以通过上传参数的设置来完成,留给大家慢慢挖掘了。
评论(55相关
君临2014年11月15日
为什么使用了import('ORG.Net.UploadFile');还是提示找不到类
我扩展类库中确定有那个类
换成命名空间应该怎样写?
回复abcllfqj09月15日
写在library下面的路径
yijiepifu20142014年09月21日
上传文件要跳转页面,可以不跳转吗
changup2014年08月22日
这个好;pass
静数秋天2014年07月31日
只能上传图片吗?能不能上传视频文件?
xutaibi2014年06月04日
多文件上传怎么添加水印呢?
aixiaoshuo2014年05月07日
多图片上传以后,怎么读取啊,保存的是一个路径啊!
www9042014年05月04日
没看懂就多学学基本功
zjoicq2014年04月28日
我想说 本地的链接怎么给啊 好烦啊 一整就是服务器地址不对
回复www9042014年05月04日
本地链接 你不会用集成环境吗 推荐UPUPW
okampfer2014年04月23日
ThinkPHP3.1.3, 根据ThinkPHP/Extend/Library/ORG/Net/UploadFile.class.php, 275行的代码,
  1. $info[] = $file;
复制代码
复制代码
复制代码
 
复制代码
 
复制代码
 
复制代码
 
复制代码
 
,是把$file这个一维数组作为一个元素push到了$info这个数组当中。因此文中“单个上传”的描述“这个文件信息是一个仅包含单个文件信息的一维数组”不准确,应该是“这个文件信息是一个仅包含单个元素的二维数组”。
回复tree1002014年05月24日
  1. Array( [0] => Array ( [name] => alum.jpg [type] => image/jpeg [size] => 13901 [extension] => jpg [savepath] => ./Uploads/ [savename] => 537f731e4d568.jpg [hash] => 05819ad39601c0c2a7c6bb4e9bd6185a ))
复制代码
复制代码
复制代码
 
复制代码
 
复制代码
 
复制代码
 
复制代码
 

是这个意思,把 $info[] = $file;改成 $info = $file;就是了。
cokeknight12014年01月07日
图片类型 'gif','jpg','jpeg','bmp','png' 是否需要考虑 ie下面 x-png 这样在ie下无法检测出来
回复paotianxiapao2014年03月05日
怎么用的?教下?
sdnt2013年12月11日
生成两张缩略图怎么设置
回复www9042014年05月04日
$upload->thumb = true;
$upload->thumbPrefix = 'm_,s_'; //生产2张缩略图//设置需要生成缩略图的文件后缀
$upload->thumbMaxWidth = '200,50'; //设置缩略图最大宽度
$upload->thumbMaxHeight = '200,50'; //设置缩略图最大高度
仔细看类文件
LUN2013年12月03日
不错
hanqing2013年11月27日
提示“没有选择上传文件”,根本没法看到表单是怎么回事?直接就提示没有选择上传文件了,请指教,谢谢。。
回复sujiexiao2015年02月28日
你的模板文件名不能和控制类操作名相同啊,这样的话总是运行操作名的。
scottle2013年11月24日
上传后的文件不是777的权限这个怎么破?在什么地方可以修改不?
tree1002013年11月23日
好难懂的说。。
jiewuzhe022013年11月16日
幸福曲线:兴趣-挫折-厌恶-理解-麻木
回复zhongqiu_cn2014年04月28日
你的经典语录
yusihuo2013年10月17日
很强大
hsc6862013年09月27日
用过了再研究感觉就好多了<a href=http://oquye.com>偶去也爆笑社区</a>
xxm2013年09月10日
大神
yshim2013年09月03日
可以点击一次浏览上传多张图片吗
xiumuzjq2013年08月29日
一次上传多张图片,不是让用户点击多下浏览,而是一次浏览可以选中多个文件这样可以做吗?
回复sjn1212920572014年09月02日
我也隐隐约约会用文件上传,你说的这种情况得用flash插件。
myfirtyou2013年08月27日
一个表单中有多处上传 且上传的文件格式不一样 怎么处理
回复myfirtyou2013年08月27日
怎么区分是由什么上传域名所发起的请求呢
zuanke2013年08月26日
这个页面内容好多啊,要学习得费功夫了。http://www.zhashutiao.com
anbaojia2013年08月26日
为什么我多文件
<td class="tLeft"><input type="file" class="huge bLeftRequire"name="m_image" ></td>
<td class="tLeft"><input type="file" class="huge bLeftRequire" name="l_image"></td>
就不行。只能写一个上传才行,
疯狂的土豆2013年08月19日
预览上传 图片的功能 怎么实现呢?
ji126872013年08月17日
多任务上传只需要修改
  1. <input type='file'  name='image'>
复制代码
 
复制代码
 
复制代码
 
复制代码
 
嘛,
上传到数据库只有一条图片数据啊
petbug2013年08月15日
很给力,好好学习了。。。。。
九日晴2013年08月07日
很给力
liminggui62013年08月05日
努力学习中....
xianglingchuan2013年06月16日
多文件上传咱设置上传目录失效啊
回复xianglingchuan2013年06月16日
看到了,传第二个参数就行了
回复ruyi2013年06月19日
回复 xianglingchuan : 厉害
回复xianglingchuan2013年07月03日
回复 ruyi : 一起学习
think2013年06月11日
缩微图保存目录是不自动建立的,我是按照官方的文件保存路径方法可以自动创建了。
2439403151@qq.com2013年06月03日
thinkphp和smarty框架有啥不一样的吗?
biean10052013年06月03日
怎么生成高度自动,只控制宽度大小的缩略图!
ranlv912013年06月01日
告诉下另一种用法把!!我急用
ranlv912013年06月01日
为什么我上传缩略图的大小不是我实际设置的大小呢!!这是为什么!!我设置100*100可是我上传1024*768的生成的大小是100*75.我上传1366*768生成的大小又是100*56让我很纠结啊!!我排版页面很出问题啊
回复thinkphp2013年06月01日
这个图像类生成缩略图的方式是等比例缩略。
回复ranlv912013年06月01日
回复 thinkphp : 什么意思,我看了image.class类里面写的不就是
(设置大小/原图大小)*原图大小,按照这个意思不就是我设置的大小吗!
回复thinkphp2013年06月01日
Image::thumb方法是会保持原图的比例进行缩略生成 Image::thumb2方法提供了裁剪支持,你的情况适用于调用第二个方法生成缩略图,用法一样。
回复ranlv912013年06月01日
回复 thinkphp : 不是很明白!!上述的代码在你那里更改下呢,
回复ranlv912013年06月01日
回复 thinkphp : 你们提供的最大宽度和高度只是让缩略图不超过它而不是实际大小是吗!!你说的裁剪第二种方法不知道怎么用。没有看见Image::thumb2这个呀!!不是很清楚,期待更明确用法代码
回复lamp992013年06月26日
回复 thinkphp : 你好,我想问一下,
'zipImages' => false,// 压缩图片文件上传
这个参数如何使用?
我现在有一个需求,就是我拍摄的照片比较大(2000*3000),上传到服务器的图片只需要很小的图片就可以了(200*300)。
解释一下,这里不是指把大图上传到服务器再生成小的缩略图。
我需要上传的是一个比较小的图片(因为带宽有限,提升上传的速度)。
目前我知道的一个方法是,前端用HTML5图像处理功能把大图重新绘制一个小的,再上传这个小的图片。
请教,这里“压缩图片文件上传”是指这个意思么?
张浩2013年05月31日
如果我想把第一个压缩成 800*500的 第二个图片压缩成100*100 的
fyrsrelialy2013年05月04日
初学TP,请问可以AJAX上传大文件吗?带进度条的那种。谢谢
回复sunyang37212013年05月25日
可以啊,得自己写AJAX来实现
rosetank2013年05月03日
上传文件个数有限制吗?为什么我每次最多只能上传20个文件?
沉浸の水泡2013年04月25日
$upload->saveRule = 'com_create_guid'; 这一句 在我 windows 下 成功了 再 linux 下 。。 竟然。。。 名字变成com_create_guid.* ! 也可能是我php版本不一样 反正就是有问题
回复倾斜的小白2013年07月03日
这个后来解决了嘛?貌似我也遇到这个问题了
回复沉浸の水泡2013年07月16日
忘了 哪一个项目 我都忘掉了 TAT 不好意思
沉浸の水泡2013年04月25日
windows 下 不生成 缩略图啊 不知道是生成了 没给我 还是 压根没生成 linux 下 同文件夹里面就有 我设置的有特殊前缀的 缩略
回复沉浸の水泡2013年04月25日
这里是我自己搞错了。。。 我没有 生成缩略图那个属性为true
mojoflower2013年03月28日
比如我现在要上传文件, 但是不确定是多少个文件,我能不能做成这样:
一开始只显示一个上传栏,但是旁边有增加上传栏的功能,我可以根据需要来增加,同时,增加的旁边也有删除的键,这样就可以根据需要来选择了
回复hailangswpu2013年06月04日
这个一自己写js来实现哈。
<script type='text/javascript'>
function add_item()
{
var nu=$("#nu").val();
nu++;
var msg='';
msg+="<tr id='"+nu+"' ><td><input type='file' id='nu_"+nu+"' /></td>";
msg+="<td><a href='javascript:void(0)' onclick='del_item("+nu+")'>[-]</a><input type='file' size='4' value='"+nu+"' /></td></tr>";
$("#table").append(msg);
$("#nu").val(nu);
}
function del_item(id)
{
$("#"+id).remove();
}
</script>
<table border="1" id="table">
<input type="hidden" id="nu" value="0" />
<tr>
<td>文本框序号</td>
<td><a href="javascript:add_item();">[+]</a></td>
</tr>
<tr>
<td><input type='file' /></td>
<td>[-]</td>
</tr>
</table>
(●.●)灬 ζั͡º丶 戒☂2013年03月28日
修改页面,2中可能:一种是图片上传,另一种是图片不上传还是之前传过的那张图片,怎么获得之前上传过的那张图片的文件名啊?
回复hailangswpu2013年06月04日
读取原来存入数据库的图片的文件名
0512xiaohacker2013年03月05日
thinkphp 批量文件上传能否做的再强大一点?
现在有这么一个案例,举例说有三个上传文件的表单一起被上传之后,其中第一个和第三个表单都是选择了文件的,第二个没有选择上传文件。这三个表单的名字都被起名为images[],提交之后打印出来的上传结果是个二维数组,这里问题就出来了,显示的是array(0=>array(啥啥啥),1=>array(啥啥啥)),能否做成不排除空文件表单,我希望上传之后打印的结果是array(0=>array(啥啥啥),1=>array(),2=>array(啥啥啥)),不知道能否实现,希望官方能给个话,谢谢啦!
回复huphua2013年04月23日
不行,这个post时候都没有
xuchen_si2013年02月22日
我采用$config 初始值传递参数报错,但是指针赋值就不会报错!
dafa1682013年02月03日
$upload->autoSub = true;
$upload->subType = 'date';
$upload->dateFormat = 'Y-m-d';
我设置子目录为时间模式,但是子目录的名称,我如何获取呢
回复dafa1682013年02月03日
明白了,默认文件名已经包含了子目录的名称,取字段就ok了 [当我自问自答吧!]
jingxiuheshan2013年01月22日
请问图片缩略图功能是哪个方法,examples中Image::water();是生成缩略图,并添加水印,而且这个是只能使用水印图片,文字图片缺是不行的!设置后无法生成缩略图!还请指教!
jiavgker2013年01月09日
补充一下:$upload->saveRule = 'time'; // 采用时间戳命名、 这时在上传多文件时往往会因重名导致上传失败,而使用默认的这个uniqid参数就不容易出现,因为uniqid是以微妙计算的。这个大家要注意。
回复mojoflower2013年03月28日
uniqid还是会出现重名替换,往往只上传最后一个, 我觉得用myfun自定义会更好实现多文件上传
回复沉浸の水泡2013年04月23日
myfun 是写在哪里呢? common.php?
cloudychen2012年12月25日
请问现在对png格式的透明图缩略后还会产生黑影么?
json_vip2012年12月19日
弱弱的问句 这么写安全吗
  1.  
  2.  <?php 
  3.  class FileAction extends Action{
  4.     
  5.     public function index(){
  6.         $File = M('File');
  7.         $list = $File->select();
  8.         $this->assign('list',$list); 
  9.         $this->display();
  10.     }
  11.     
  12.     //文件上传的地址提交给它,并且上传完成之后返回一个信息,让其写入数据库
  13.     public function upload(){
  14.         
  15.         //导入 实例化上传类 配置 
  16.         import("ORG.Net.UploadFile");
  17.         $upload=new UploadFile();
  18.         $upload->maxSize = 1000000;    //文件上传的最大文件大小(以字节为单位)默认为-1 不限大小
  19.         $upload->allowExts = array('jpg','gif','png','jpeg'); //允许上传的文件后缀(留空为不限制),使用数组设置,默认为空数组
  20.         $upload->allowTypes = array();    //允许上传的文件类型(留空为不限制),使用数组设置,默认为空数组
  21.         $upload->savePath = './Public/Uploads/';   //文件保存路径,如果留空会取UPLOAD_PATH常量定义的路径            
  22.         
  23.         //判断上传是否成功
  24.         if(!$upload->upload()){
  25.             $this->error($upload->getErrorMsg());
  26.         }else{
  27.             $info = $upload->getUploadFileInfo();   //获取图片的相关信息
  28.             //dump($info); exit();    //可以输出看下$info类型
  29.         }
  30.         
  31.         //保存表单数据 包括附件数据
  32.         /*如果单个图片上传,把for循环去掉,$info["$i"]["savename"];改成$info[0]["savename"];*/
  33.         for($i=0;$i<count($info);$i++){
  34.             $File = D('File');
  35.             $File->create();
  36.             $File->filename = $info["$i"]["savename"];
  37.             $File->add();            
  38.         }
  39.         $this->success('Mysql success!');
  40.     }
  41.     
  42.  }
  43.  ?>
  44.  
复制代码
 
复制代码
 
pangxianfei2012年12月16日
我要保持上传的文件名,如何设置呢?
回复thinkphp2012年12月17日
设置上传规则为空 就表示保持上传的文件名不变
yunyu2012年12月15日
上传图片生成缩略图的宽度和高度必须一致吗,我写了一个让生成250*200缩略图的,结果生成的是200*200的啊
回复thinkphp2012年12月16日
默认的缩略图是按照原图的比例来的,没有裁剪
qiaoyinqian2012年12月15日
增加了缩略图原图上传不上去了,
thinkphp2012年12月12日
这篇文件上传教程 主要涉及的是后台上传操作,前端的上传效果包括ajax上传 动态表单等等 这个是另外的话题了。
回复itoluem2013年09月08日
如果多个表单以图文混合保存以后,肯定会有个编辑的功能,如果用户选择了重新上传图片,判断$_FILE过来的数据为真时,调用扩展!这里如果是单文件上传还好点,多文件的话感觉会很麻烦, 要自己另外加很多代码,一是要判断$_FILE过来的数据顺序,二还要判断原数据是否存在图片,存在时,要把原图删了,然后再根据SESSION保存新的SEAVEPATH信息!
power7212012年12月12日
能动态增加上传文件数量就好了。
回复azoon2012年12月12日
用JS弄,不难的啊
回复小树叶子2012年12月13日
这个是JS是范畴了
baoying19899202012年12月12日
看着挺好啊,,不过能把视频上传后也弄个缩略图吗
回复小树叶子2012年12月13日
视屏上传截屏和PHP无关了,你要查一下视频解码组件的相关信息。其实也不难,我曾经做过一次。
回复六代目2015年01月16日
请问视频上传是怎么弄得啊

普通分类: