当前位置:首页 » 文件传输 » thinkphp5上传文件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

thinkphp5上传文件

发布时间: 2022-01-21 09:56:33

㈠ tp5中调用文件上传方法报Call to a member function move() on string的处理方法。

你的对象实例化失败了。 你调用了一个类内方法 Create(),但是由于对象实例化失败,无法调用,所以报致命错误

㈡ thinkphp 的上传代码中。如何让上传的文件的保存名为它自己的名字,而不是时间戳生成的名字

可以设置啊,saveRule 上传文件命名规则 留空则使用原来文件名保存;
http://xss23.iteye.com/blog/398584网上随便一搜索,都是这个,

㈢ Thinkphp5 删除上传文件

ThinkPHP上传文件及删除文件方法如下:
一、准备工作
1.注册账号
2.选择对象储存->创建空间->设置为公开
3.在config配置文件中添加以下代码
'UPLOAD_FILE_QINIU' => array (
'maxSize' => 5 * 1024 * 1024,//文件大小
'rootPath' => './根目录/',
'savePath' => '子目录',// 文件上传的保存路径
'saveName' => array ('uniqid', ''),
'exts' => ['zip', 'rar', 'txt', 'doc', 'docx', 'xlsx', 'xls', 'pptx', 'pdf', 'chf'], //

设置附件上传类型
driver' => 'Qiniu',
'driverConfig' => array (
'secretKey' => '<这里填七SK>',
'accessKey' => '<这里填七AK>',
'domain' => '<这里填七提供的域名>',
'bucket' => '<空间名称>',
)
),
二、利用thinkPHP上传文件
1.新建upload控制器->uploadFile方法
public function uploadTicketFile()
{
$setting = C('UPLOAD_FILE_QINIU');
$Upload = new \Think\Upload($setting);
$info = $Upload->upload($_FILES);
$path = str_replace('/','_',$info['file']['savepath']);
$filename = $path.$info['file']['savename'];//保存的文件名称
if(!$info)
{
$data = ['status'=>0,'msg'=>'上传失败,'.$Upload->getError()];
}
else
{
$data = [
'status'=>1,
'msg' => '上传成功',
'name' => $_FILES['file']['name'],
'size' => $_FILES['file']['size'],
'cname' => $filename,
'type' => $info['file']['ext'],
'link' => $info['file']['url'],
];
}
echo json_encode($data);
exit;
}
三.利用thinkPHP删除上传的文件
1.upload控制器->新建delFile方法
public function delFile()
{ $setting = C('UPLOAD_FILE_QINIU');
$file_name = I('post.file_name');//要删除的文件名称
$Qiniu = new Think\Upload\Driver\Qiniu\QiniuStorage($setting['driverConfig']);
$result = $Qiniu->del($file_name);
$error = $Qiniu->errorStr;//错误信息
if(is_array($result) && !($error))
{
$data = ['status'=>1,'msg'=>'删除文件成功'];
}
else
{
$data = ['status'=>0,'msg'=>'删除文件失败,'.$error];
}
echo json_encode($data);
exit;
}

㈣ thinkphp5 怎么接受zyupload,上传的图片

引入这个类就可以

<?php
//视图表单
//支持多张图片上传
classupload{
var$dir;//附件存放物理目录
var$time;//自定义文件上传时间
var$allow_types;//允许上传附件类型
var$field;//上传控件名称
var$maxsize;//最大允许文件大小,单位为KB
var$thumb_width;//缩略图宽度
var$thumb_height;//缩略图高度
var$watermark_file;//水印图片地址
var$watermark_pos;//水印位置
var$watermark_trans;//水印透明度
//构造函数
//$types:允许上传的文件类型,$maxsize:允许大小,$field:上传控件名称,$time:自定义上传时间
functionupload($types='jpg|png',$maxsize=1024,$field='attach',$time=''){
$this->allow_types=explode('|',$types);
$this->maxsize=$maxsize*1024;
$this->field=$field;
$this->time=$time?$time:time();
}
//设置并创建文件具体存放的目录
//$basedir:基目录,必须为物理路径
//$filedir:自定义子目录,可用参数{y}、{m}、{d}
functionset_dir($basedir,$filedir=''){
$dir=$basedir;
!is_dir($dir)&&@mkdir($dir,0777);
if(!empty($filedir)){
$filedir=str_replace(array('{y}','{m}','{d}'),array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strtolower($filedir));//用string_replace把{y}{m}{d}几个标签进行替换
$dirs=explode('/',$filedir);
foreach($dirsas$d){
!empty($d)&&$dir.=$d.'/';
!is_dir($dir)&&@mkdir($dir,0777);
}
}
$this->dir=$dir;
}
//图片缩略图设置,如果不生成缩略图则不用设置
//$width:缩略图宽度,$height:缩略图高度
functionset_thumb($width=0,$height=0){
$this->thumb_width=$width;
$this->thumb_height=$height;
}
//图片水印设置,如果不生成添加水印则不用设置
//$file:水印图片,$pos:水印位置,$trans:水印透明度
functionset_watermark($file,$pos=6,$trans=80){
$this->watermark_file=$file;
$this->watermark_pos=$pos;
$this->watermark_trans=$trans;
}
/*—————————————————————-
执行文件上传,处理完返回一个包含上传成功或失败的文件信息数组,
其中:name为文件名,上传成功时是上传到服务器上的文件名,上传失败则是本地的文件名
dir为服务器上存放该附件的物理路径,上传失败不存在该值
size为附件大小,上传失败不存在该值
flag为状态标识,1表示成功,-1表示文件类型不允许,-2表示文件大小超出
—————————————————————–*/
functionexecute(){
$files=array();//成功上传的文件信息
$field=$this->field;
$keys=array_keys($_FILES[$field]['name']);
foreach($keysas$key){
if(!$_FILES[$field]['name'][$key])continue;
$fileext=$this->fileext($_FILES[$field]['name'][$key]);//获取文件扩展名
$filename=date('Ymdhis',$this->time).mt_rand(10,99).'.'.$fileext;//生成文件名
$filedir=$this->dir;//附件实际存放目录
$filesize=$_FILES[$field]['size'][$key];//文件大小
//文件类型不允许
if(!in_array($fileext,$this->allow_types)){
$files[$key]['name']=$_FILES[$field]['name'][$key];
$files[$key]['flag']=-1;
continue;
}
//文件大小超出
if($filesize>$this->maxsize){
$files[$key]['name']=$_FILES[$field]['name'][$key];
$files[$key]['name']=$filesize;
$files[$key]['flag']=-2;
continue;
}
$files[$key]['name']=$filename;
$files[$key]['dir']=$filedir;
$files[$key]['size']=$filesize;
//保存上传文件并删除临时文件
if(is_uploaded_file($_FILES[$field]['tmp_name'][$key])){
move_uploaded_file($_FILES[$field]['tmp_name'][$key],$filedir.$filename);
@unlink($_FILES[$field]['tmp_name'][$key]);
$files[$key]['flag']=1;
//对图片进行加水印和生成缩略图,这里演示只支持jpg和png(gif生成的话会没了帧的)
if(in_array($fileext,array('jpg','png'))){
if($this->thumb_width){
if($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)){
$files[$key]['thumb']='thumb_'.$filename;//缩略图文件名
}
}
$this->create_watermark($filedir.$filename);
}
}
}
return$files;
}
//创建缩略图,以相同的扩展名生成缩略图
//$src_file:来源图像路径,$thumb_file:缩略图路径
functioncreate_thumb($src_file,$thumb_file){
$t_width=$this->thumb_width;
$t_height=$this->thumb_height;
if(!file_exists($src_file))returnfalse;
$src_info=getImageSize($src_file);
//如果来源图像小于或等于缩略图则拷贝源图像作为缩略图,免去操作
if($src_info[0]<=$t_width&&$src_info[1]<=$t_height){
if(!($src_file,$thumb_file)){
returnfalse;
}
returntrue;
}
//按比例计算缩略图大小
if(($src_info[0]-$t_width)>($src_info[1]-$t_height)){
$t_height=($t_width/$src_info[0])*$src_info[1];
}else{
$t_width=($t_height/$src_info[1])*$src_info[0];
}
//取得文件扩展名
$fileext=$this->fileext($src_file);
switch($fileext){
case'jpg':
$src_img=ImageCreateFromJPEG($src_file);break;
case'png':
$src_img=ImageCreateFromPNG($src_file);break;
case'gif':
$src_img=ImageCreateFromGIF($src_file);break;
}
//创建一个真彩色的缩略图像
$thumb_img=@ImageCreateTrueColor($t_width,$t_height);
//ImageCopyResampled函数拷贝的图像平滑度较好,优先考虑
if(function_exists('imageresampled')){
@ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
}else{
@ImageCopyResized($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
}
//生成缩略图
switch($fileext){
case'jpg':
ImageJPEG($thumb_img,$thumb_file);break;
case'gif':
ImageGIF($thumb_img,$thumb_file);break;
case'png':
ImagePNG($thumb_img,$thumb_file);break;
}
//销毁临时图像
@ImageDestroy($src_img);
@ImageDestroy($thumb_img);
returntrue;
}
//为图片添加水印
//$file:要添加水印的文件
functioncreate_watermark($file){
//文件不存在则返回
if(!file_exists($this->watermark_file)||!file_exists($file))return;
if(!function_exists('getImageSize'))return;
//检查GD支持的文件类型
$gd_allow_types=array();
if(function_exists('ImageCreateFromGIF'))$gd_allow_types['image/gif']='ImageCreateFromGIF';
if(function_exists('ImageCreateFromPNG'))$gd_allow_types['image/png']='ImageCreateFromPNG';
if(function_exists('ImageCreateFromJPEG'))$gd_allow_types['image/jpeg']='ImageCreateFromJPEG';
//获取文件信息
$fileinfo=getImageSize($file);
$wminfo=getImageSize($this->watermark_file);
if($fileinfo[0]<$wminfo[0]||$fileinfo[1]<$wminfo[1])return;
if(array_key_exists($fileinfo['mime'],$gd_allow_types)){
if(array_key_exists($wminfo['mime'],$gd_allow_types)){
//从文件创建图像
$temp=$gd_allow_types[$fileinfo['mime']]($file);
$temp_wm=$gd_allow_types[$wminfo['mime']]($this->watermark_file);
//水印位置
switch($this->watermark_pos){
case1://顶部居左
$dst_x=0;$dst_y=0;break;
case2://顶部居中
$dst_x=($fileinfo[0]-$wminfo[0])/2;$dst_y=0;break;
case3://顶部居右
$dst_x=$fileinfo[0];$dst_y=0;break;
case4://底部居左
$dst_x=0;$dst_y=$fileinfo[1];break;
case5://底部居中
$dst_x=($fileinfo[0]-$wminfo[0])/2;$dst_y=$fileinfo[1];break;
case6://底部居右
$dst_x=$fileinfo[0]-$wminfo[0];$dst_y=$fileinfo[1]-$wminfo[1];break;
default://随机
$dst_x=mt_rand(0,$fileinfo[0]-$wminfo[0]);$dst_y=mt_rand(0,$fileinfo[1]-$wminfo[1]);
}
if(function_exists('ImageAlphaBlending'))ImageAlphaBlending($temp_wm,True);//设定图像的混色模式
if(function_exists('ImageSaveAlpha'))ImageSaveAlpha($temp_wm,True);//保存完整的alpha通道信息
//为图像添加水印
if(function_exists('imageCopyMerge')){
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
}else{
ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1]);
}
//保存图片
switch($fileinfo['mime']){
case'image/jpeg':
@imageJPEG($temp,$file);
break;
case'image/png':
@imagePNG($temp,$file);
break;
case'image/gif':
@imageGIF($temp,$file);
break;
}
//销毁零时图像
@imageDestroy($temp);
@imageDestroy($temp_wm);
}
}
}
//获取文件扩展名
functionfileext($filename){
returnstrtolower(substr(strrchr($filename,'.'),1,10));
}
}
?>

㈤ thinkphp5 上传多个文件需要实例化么

<tr>
<td><inputtype='file'name='video[]'/></td>
<td><inputtype='file'name='video[]'/></td>
<td><inputtype='file'name='video[]'/></td>
</tr>
<tr>
<td><inputtype='file'name='pic[]'/></td>
<td><inputtype='file'name='pic[]'/></td>
<td><inputtype='file'name='pic[]'/></td>
</tr>
这种不同name的多文件上传,怎么改UploadFile.class.php类,来实现多name多文件上传
index.html
<formmethod="POST"enctype="multipart/form-data"action="{:U('Index/upload')}">
<tr>
<td>flv文件</td>
<td><inputtype="file"name="flv"/></td>
</tr>
<tr>
<td>视频压缩文件</td>
<td><inputtype="file"name="movie"/></td>
</tr>
<tr>
<td>缩略图</td>
<td><inputtype="file"name="img"/></td>
</tr>
<inputtype="submit"value="上传"/>
</form>
复制代码
UploadFile.class.php162行
if(!is_dir($savePath)){
//检查目录是否编码后的
if(is_dir(base64_decode($savePath))){
$savePath=base64_decode($savePath);
}else{
//尝试创建目录
if(!mkdir($savePath)){
$this->error='上传目录'.$savePath.'不存在';
returnfalse;
}
}
}else{
if(!is_writeable($savePath)){
$this->error='上传目录'.$savePath.'不可写';
returnfalse;
}
}
复制代码
改成
if(!is_array($savePath)){
if(!is_dir($savePath)){
//检查目录是否编码后的
if(is_dir(base64_decode($savePath))){
$savePath=base64_decode($savePath);
}else{
//尝试创建目录
if(!mkdir($savePath)){
$this->error='上传目录'.$savePath.'不存在';
returnfalse;
}
}
}else{
if(!is_writeable($savePath)){
$this->error='上传目录'.$savePath.'不可写';
returnfalse;
}
}
}
复制代码
UploadFile.class.php194行
$file['savepath']=$savePath;
复制代码
改成
$file['savepath']=is_array($savePath)?$savePath[$key]:$savePath;
复制代码
Publicfunctionupload(){
import('Org.Net.UploadFile');
$upload=newOrgNetUploadFile();//实例化上传类
$upload->maxSize=3145728;//设置附件上传大小
$upload->allowExts=array('jpg','gif','png','jpeg');//设置附件上传类型
//$upload->savePath='./Public/Uploads/';//设置附件上传目录
$upload->savePath=array('flv'=>'./Public/Uploads/flv/','movie'=>'./Public/Uploads/movie/','img'=>'./Public/Uploads/img/');
if(!$upload->upload()){
$this->error($upload->getErrorMsg());
}else{//上传成功获取上传文件信息
$info=$upload->getUploadFileInfo();
}

}
复制代码
$upload->savePath改为数组
./Public/Uploads/flv/
./Public/Uploads/movie/
./Public/Uploads/img/
这3个目录要手动创建这样在就变成不影响原来程序的
情况下实现上传多个文件到不同的目录了

㈥ thinkphp5.0.5怎么自定义命名上传文件

ThinkPHP5.0内置了一个文件处理类 hinkFile,内置的文件上传操作也是调用了该类进行处理的。

File类继承了PHP的SplFileObject类,因此可以调用SplFileObject类所有的属性和方法。

表单代码:

<formaction="/index/index/upload"enctype="multipart/form-data"method="post">
<inputtype="file"name="image"/><br>
<inputtype="submit"value="上传"/>
</form>

控制器代码:

publicfunctionupload(){
//获取表单上传文件例如上传了001.jpg
$file=request()->file('image');
//移动到框架应用根目录/public/uploads/目录下
$info=$file->move(ROOT_PATH.'public'.DS.'uploads');
if($info){
//成功上传后获取上传信息
//输出jpg
echo$info->getExtension();
//输出20160820/.jpg
echo$info->getSaveName();
//输出.jpg
echo$info->getFilename();
}else{
//上传失败获取错误信息
echo$file->getError();
}
}

move方法成功的话返回的是一个SplFileInfo对象,你可以对上传后的文件进行后续操作,比如改名。

㈦ 请问你有Thinkphp下使用Bootstrap File Input多文件上传的案例吗

现在我们开始使用插件
(1)首先引入文件
<!--css文件-->
<link href="__PUBLIC__/css/fileinput.css" media="all" rel="stylesheet" type="text/css" />

<link href="__PUBLIC__/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">

<!--js文件-->
<script src="__PUBLIC__/js/jQuery.min.js" type="text/JavaScript"></script>
<script src="__PUBLIC__/js/bootstrap.min.js?v=3.3.6"></script>
<script src="__PUBLIC__/js/plugins/fileinput.js" type="text/javascript"></script>
<script src="__PUBLIC__/js/fileinput.min.js" type="text/javascript"></script>

(2)初始化控件
<input id="file" name="file_data[]" type="file" multiple data-preview-file-type="any" data-show-caption="true">
data-preview-file-type="any" :设置之后可以上传多个文件
name="file_data[]" :因为要上传多个文件所以要用数组
(3)js初始化控件
$("#file").fileinput({
uploadUrl: "{:U('Admin/Img/imgupload2')}",// 上传路径
uploadAsync: false,//是否异步传输
maxFileCount: 5//最大文件上传数量
}).on('filebatchpreupload', function(event, data, id, index) {

}).on('filebatchuploadsuccess', function(event, data) {//上传成功从服务器端返回的数据(即保存的文件名称)
for(var i=0;i<data.response.length;i++){
alert(data.response[i].flag);
}
});
(4)thinkphp对应的方法
public function imgupload2(){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Public/Uploads/';// 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
$info = $upload->upload(array($_FILES['file_data'])); // 上传文件
$i=0;
if(!$info) {// 上传错误提示错误信息
$a[$i]['flag']="no";
$this->ajaxReturn($a,'JSON');
}else{// 上传成功 获取上传文件信息
foreach($info as $file){
$a[$i]['flag']=$file['savepath'].$file['savename'];
$i++;
}
}
$this->ajaxReturn($a,'JSON');
}

㈧ thinkphp 怎么上传视频,求代码急

Peter

链接:

提取码: 4zuf 复制这段内容后打开网络网盘手机App,操作更方便哦

若资源有问题欢迎追问~

㈨ tp5文件上传时怎么把图片路径和post数据一起存到数据库(图片使用ajax提交post数据使用form提交)

ajax上传图片成功后返回图片路径
前端再把这个路径存到一个隐藏字段里,form一起提交

㈩ ThinkPHP中上传文件如何解决重复问题

重复上传问题其实很好解决,下面提供两个简单的思路,请按需求选取。

1、简单的但风险比较大【适合新增操作,不适合修改操作】。可以使用命名规则进行判断是否已上传。

举个简单的例子,如上传的按钮name="file",那命名的时候就以这个字段来命名,

如:file-{$date}.png

$date=date('Y-m-d');//当天的日期
$fileimg="file-{$date}.png";//上传的图片命名

这个方法虽然不是特别准确的覆盖,但是在一定程度上做到了覆盖。

如果你这个图片是不变的,类似logo类型的图片,那直接命名为logo.png,这样每次提交都会覆盖原来的图片,不会重复。

注意:这个覆盖操作会把原来的图片覆盖了,也就是没办法恢复原来的图片。

2、修改操作的时候,只有确定提交了才覆盖。

这个操作比较复杂一点,简单说说就是修改的时候,上传的图片命名规则跟方法1一样,也就是每次修改的图片重复覆盖,但是不覆盖原来的图片,用户确定提交后再删除原来的图片,将图片路径换为新上传的图片路径。流程图如下:

//用户修改信息
上传图片----上传图片命名:file_tmp.png----注意:这个图片命名跟原图片命名不同
多次重复上传修改---图片重复覆盖file_tmp.png

//用户最终确定上传图片
后台处理程序,获取图片的路径,unlink原来的图片路径(再次跟据修改的ID查询到图片路径,
进行删除),修改获取的图片命名rename将file_tmp.png改为file.png,将新的文件路径提交
更新。

以上就是两种处理图片重复的问题,希望能够帮助到你。