设为首页收藏本站
查看: 76|回复: 0

[PHP] Thinkphp多文件上传

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2013-8-6 14:30:00 | 显示全部楼层 |阅读模式
    Thinkphp手册中对于多文件上传描述的很清楚:如果需要使用多个文件,只需要修改表单,把
      [ol]
  •   [/ol]   改为
    [ol]  [ol]
  • [/ol]  [/ol]   或者
    [ol]  [ol]
  •   [/ol]  [/ol]  这样就可以多文件上传了,确实没错,但是有个问题,每个上传表单域对应一个数据库字段。当然,上传成功的文件是需要保存数据库的。而手册上的这种写法就不行了,上传方法是在model里面写的,用的自动完成。但是表单域的name都是一个名字,这样上传的时候三个表单域都进了一个自动完成方法,只返回一个值。所以我想到了一个方法,但是总感觉官方会有更好的方法解决这个问题。搜索引擎搜遍了,没有我想要的效果。只能自己写了。
      暂且自己的上传表单域为两个,一个上传图片,一个上传视频。字段名为image、video。
      html代码如下
      [ol]
  • 图片:
  •    
  • 视频:  [/ol]   model代码:
      [ol]
  • protected $info= '';
  •    
  • protected $_auto = array(
  • array('image','upload',3,callback),//自动完成方法
  • array('video','videoupload',3,callback), //自动完成方法
  • );//自动填充上传图片生成缩略图
  • protected function upload(){
  • $var = $_FILES['image']['name'];
  • import('ORG.Net.UploadFile');
  • $upload = new UploadFile();
  • $upload->saveRule  = time;
  • $upload->allowExts  = array('jpg', 'gif', 'png', 'zip','flv');
  • $upload->thumb = true;
  • //视频路径。。。只支持flv后缀,
  • $upload->videopath = './Public/upload/Video/';
  • $upload->savePath =  './Public/upload/images/';
  • $upload->thumbPrefix = '250_115_,150_110_,213_156_';
  • $upload->thumbMaxWidth='250,150,213';
  • $upload->thumbMaxHeight='115,110,156';
  • if(!in_array('',$var) || !in_array('',$_FILES['video']['name'])){
  • if(!$upload->upload()) {
  • echo $upload->getErrorMsg();die;
  • }else{
  • $this->info =  $upload->getUploadFileInfo();
  • if(!in_array('',$var) && !in_array('',$_FILES['video']['name'])){
  • return $this->info[1]['savename'];
  • }elseif(!in_array('',$var)){
  • return $this->info[0]['savename'];
  • }else{
  • return false;
  • }
  •    
  • }
  • }else{
  • return flase;
  • }
  • }
  • //上传视频
  • protected function videoupload(){
  • if(!in_array('',$var) && !in_array('',$_FILES['video']['name'])){
  • return $this->info[0]['savename'];
  • }elseif(!in_array('',$_FILES['video']['name'])){
  • return $this->info[1]['savename'];
  • }else{
  • return false;
  • }
  •    
  • }  [/ol]   自始至终感觉能有非常简便的解决方法,但是摸不着其要领。这也算是一个勉强的解决方案。如果有人遇到过这个问题,欢迎与松林交流。松林渴望简单的解决这个问题。百度、google、bing、都没有查询到问题。
    [/ol]
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表