目录
回复讨论(解决方案)
首页 后端开发 php教程 thinkphp3.1 多文件上传图片和文档,怎么保存在不同的文件夹?

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

Jun 23, 2016 pm 01:54 PM
上传 图片 文件夹 文档

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();
登录后复制
登录后复制

恩恩,谢谢版主大大了,第一次用框架,几个问题都是版主大大解决的。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? 小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? Mar 22, 2024 am 08:06 AM

小红书发布自动保存图片怎么解决?发布自动保存图片在哪里?

抖音评论里怎么发图片?评论区图片入口在哪里? 抖音评论里怎么发图片?评论区图片入口在哪里? Mar 21, 2024 pm 09:12 PM

抖音评论里怎么发图片?评论区图片入口在哪里?

在 iPhone 上使图片更清晰的 6 种方法 在 iPhone 上使图片更清晰的 6 种方法 Mar 04, 2024 pm 06:25 PM

在 iPhone 上使图片更清晰的 6 种方法

您同步的文件夹中的一个或多个项目不匹配Outlook错误 您同步的文件夹中的一个或多个项目不匹配Outlook错误 Mar 18, 2024 am 09:46 AM

您同步的文件夹中的一个或多个项目不匹配Outlook错误

ppt怎么让图片一张一张出来 ppt怎么让图片一张一张出来 Mar 25, 2024 pm 04:00 PM

ppt怎么让图片一张一张出来

福昕PDF阅读器如何将pdf文档转成jpg图片-福昕PDF阅读器将pdf文档转成jpg图片的方法 福昕PDF阅读器如何将pdf文档转成jpg图片-福昕PDF阅读器将pdf文档转成jpg图片的方法 Mar 04, 2024 pm 05:49 PM

福昕PDF阅读器如何将pdf文档转成jpg图片-福昕PDF阅读器将pdf文档转成jpg图片的方法

如何对Word文档加红线 如何对Word文档加红线 Mar 01, 2024 am 09:40 AM

如何对Word文档加红线

win10文件夹设置密码保护怎么设置 win10文件夹设置密码保护怎么设置 Feb 29, 2024 am 09:00 AM

win10文件夹设置密码保护怎么设置

See all articles