㈠ 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
鏈接:
若資源有問題歡迎追問~
㈨ 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,將新的文件路徑提交
更新。
以上就是兩種處理圖片重復的問題,希望能夠幫助到你。