Heim >Backend-Entwicklung >PHP-Tutorial >thinkphp3.1 多文件上传图片和文档,怎么保存在不同的文件夹?

thinkphp3.1 多文件上传图片和文档,怎么保存在不同的文件夹?

WBOY
WBOYOriginal
2016-06-23 13:54:52967Durchsuche

thinkphp3.1 上传图片和文档,怎么分开保存?


回复讨论(解决方案)

根据文件后缀,判断上传目录选择

根据文件后缀,判断上传目录选择


$upload->savePath= './Public/image/home/news/';

if(!$upload->upload()) {// 上传错误提示错误信息
$this->error($upload->getErrorMsg());
}else{// 上传成功 获取上传文件信息
$info =  $upload->getUploadFileInfo();
}
这个上传目录不是只能设置一个么,怎么设置两个,thinkphp上传类第一次用。

thinkphp3.1 没有提供相应的方案,所以需要你自己设计
你可以继承 UploadFile 类,重写 save 方法
也可以用自己的上传类完成

如果你可以获取文件后缀$type

if ($type == '.jpg'){
    $upload->savePath= './Public/image/home/ new1/';
    if(!$upload->upload()) {// 上传错误提示错误信息
        $this->error($upload->getErrorMsg());
    }else{// 上传成功 获取上传文件信息
        $info =  $upload->getUploadFileInfo();
}
}else if ($type == '.txt'){
    $upload->savePath= './Public/image/home /new2/';
    if(!$upload->upload()) {// 上传错误提示错误信息
        $this->error($upload->getErrorMsg());
    }else{// 上传成功 获取上传文件信息
        $info =  $upload->getUploadFileInfo();
    }
}

如果我上传的是一个图片一个文档 2 个个文件呢?

如果你可以获取文件后缀$type

if ($type == '.jpg'){
    $upload->savePath= './Public/image/home/ new1/';
    if(!$upload->upload()) {// 上传错误提示错误信息
        $this->error($upload->getErrorMsg());
    }else{// 上传成功 获取上传文件信息
        $info =  $upload->getUploadFileInfo();
}
}else if ($type == '.txt'){
    $upload->savePath= './Public/image/home /new2/';
    if(!$upload->upload()) {// 上传错误提示错误信息
        $this->error($upload->getErrorMsg());
    }else{// 上传成功 获取上传文件信息
        $info =  $upload->getUploadFileInfo();
    }
}

如果同时上传多个文件,应该会有多个file文件域吧?



这就对file判断不就是?

如果你愿意修改 UploadFile.class.php 文件的话,事情还是有转机的
把 getSaveName 方法中的(408行附近)
$saveName = $rule().".".$filename['extension'];
改成
$saveName = $rule($filename).".".$filename['extension'];

然后

$upload->savePath = '';$upload->saveRule = 'myFunction';

定义函数
function myFunction($filename) {  $p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? '图片路径' : '文档路径';  return $p . $filename['name'];}

由于之后还会加上后缀,所以 $filename['name'] 怎么变形你可随意

如果你愿意修改 UploadFile.class.php 文件的话,事情还是有转机的
把 getSaveName 方法中的(408行附近)
$saveName = $rule().".".$filename['extension'];
改成
$saveName = $rule($filename).".".$filename['extension'];

然后

$upload->savePath = '';$upload->saveRule = 'myFunction';

定义函数
function myFunction($filename) {  $p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? '图片路径' : '文档路径';  return $p . $filename['name'];}

由于之后还会加上后缀,所以 $filename['name'] 怎么变形你可随意


import('ORG.Net.UploadFile');
$upload = new UploadFile();// 实例化上传类
$upload->maxSize = 3145728;
$upload->savePath = '';
$upload->saveRule = 'myFunction';
if(!$upload->upload()) {// 上传错误提示错误信息
$this->error($upload->getErrorMsg());
}else{// 上传成功 获取上传文件信息
$info =  $upload->getUploadFileInfo();
}



private function getSaveName($filename) {
        $rule = $this->saveRule;
        if(empty($rule)) {//没有定义命名规则,则保持文件名不变
            $saveName = $filename['name'];
        }else {
            if(function_exists($rule)) {
                //使用函数生成一个唯一文件标识号
                $saveName = $rule($filename).".".$filename['extension'];
            }else {
                //使用给定的文件名作为标识号
                $saveName = $rule.".".$filename['extension'];
            }
        }
        if($this->autoSub) {
            // 使用子目录保存文件
            $filename['savename'] = $saveName;
            $saveName = $this->getSubName($filename).$saveName;
        }
        return $saveName;
    }






function my_filename() {
return date('ymdHis',time()).'_'.mt_rand();
}

function myFunction($filename) {
$p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? './Public/image/home/img/' : './Public/image/home/file/';
return $p . $filename[my_filename()];
}




改了,这三个地方,提示上传路径不存在。

是空的,我在上传目录不存在上一句输出了下。

既然你的 ./Public/image/home/ 是公共的,那么就
$upload->savePath = './Public/image/home/';
函数里只留 'img/' : 'file/'

既然你的 ./Public/image/home/ 是公共的,那么就
$upload->savePath = './Public/image/home/';
函数里只留 'img/' : 'file/'


版主大大,路径可以用了,不过现在是名字是空的了。
文件已经存在!./Public/image/home/img/.jpg

return $p . $filename[my_filename()];
应为
return $p . my_filename();

可直接写作

return $p . date('ymdHis_').mt_rand();

return $p . $filename[my_filename()];
应为
return $p . my_filename();

可直接写作

return $p . date('ymdHis_').mt_rand();

恩恩,谢谢版主大大了,第一次用框架,几个问题都是版主大大解决的。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn