當前位置:首頁 » 文件傳輸 » thinkphp文件上傳實例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

thinkphp文件上傳實例

發布時間: 2023-08-26 08:30:51

1. thinkphp怎麼用又拍雲上傳文件

thinkphp內置又拍雲上傳引擎的,修改配置文件就可以

'FILE_UPLOAD_TYPE'=>'Ftp',
'UPLOAD_TYPE_CONFIG'=>array(
'host'=>'',//又拍雲伺服器
'username'=>'',//又拍雲用戶
'password'=>'',//又拍雲密碼
'bucket'=>'',//空間名稱
'timeout'=>90,//超時時間
),

2. Thinkphp怎麼批量添加數據

<?php
class FileAction extends Action {
public function Index()
{
//print_r(__URL__);
$file = M('file');
$list = $file->select();
$this->assign('filelist',$list);
$this->display();
}

public function upload()
{
//文件上傳的地址上傳給它,並且上傳完成後返回一個信息,讓其寫入資料庫
//如果$_FILES為空的畫,我就讓action給出一個錯誤提示,告訴用戶必須選擇上傳文件。如果有上傳文件,則調用up方法
//$_FILES = $this->_post('file');
//print_r($_FILES);

if (empty($_FILES)) {
$this->error('必須選擇上傳文件');
}else {
$a = $this->Up();
//print_r($a);
if (isset($a)) {
//寫入資料庫方法
if($this->c($a)) {
$this->success('上傳成功');
}else {
$this->error('寫入資料庫失敗');
}
}else {
$this->error('上傳文件有異常請與系統管理員聯系');
}
}
}

private function c($data)
{
//print_r($data);
$file=M('file');
$num = '0';
for($i = 0; $i < count($data)-1; $i++) {
$data['filename']=$data[$i]['savename'];
if( $file->data($data)->add())
{
$num++;
}
}
if($num==count($data)-1)
{
return true;
}else {
return false;
}
}
// private function c($data)
// {
// $file = M('file');
// $data['filename'] = $data[0]['savename'];
// if ($file->data($data)->add()) {
// return true;
// }else {
// return false;
// }

// }

//在這個方法當中,完成與thinkphp相關的,文件上傳類的調用
private function Up()
{
//echo '模擬上傳';
//基本上傳功能
//批量上傳功能
//生成圖片縮略圖
//自定義參數上傳
//上傳檢測(大小,後綴,mime類型)
//支持覆蓋方式上傳
//上傳類型,附件大小,上傳路徑定義
//支持hash或者日期子目錄保存上傳文件
//上傳圖片的安全性檢測
//對上傳文件的hash檢測
//上傳文件名自定義規范
import('@.ORG.UploadFile');
import('@.ORG.Image');
$upload = new UploadFile();
$upload->maxSize = '1000000'; //指上傳文件大小,默認為-1,不限制大小(bytes)
$upload->savePath = './Public/'; //上傳保存到什麼地方?路徑建議保存到入口文件平級或平級目錄的子目錄
$upload->saveRule = 'uniqid'; //上傳文件的文件名保存規則 time uniqid(默認) com_create_guid
$upload->hashType = 'md5_file';
$upload->autoCheck = true; //是否自動檢測附件 默認true
$upload->uploadReplace = true; //如果存在同名文件是否進行覆蓋
$upload->allowExts = array('jpg','jpeg','png','gif'); //允許上傳的文件後綴
$upload->allowPath = array('image/png','image/jpg','image/pjpeg','image/gif','image/jpeg'); //檢測mime類型
$upload->thumb = true; // 是否開啟圖片文件縮略
$upload->thumbMaxWidth = '300,500';//縮略圖最大寬度
$upload->thumbMaxHeight = '200,400';//最大高度
$upload->thumbPrefix = 's-,m-';//縮略圖文件前綴
//$upload->thumbSuffix = '_s,_m';//文件後綴
//$upload->thumbPath = '';//如果留空直接上傳至
//$upload->thumbFile 在資料庫中也存一個文件名即可
$upload->thumbRemoveOrigin = 1; //如果生成縮略圖,是否刪除原圖
//$upload->autoSub 是否使用子目錄進行保存上傳文件
//$upload->subType='' 子目錄創建方式默認為hash 也可以為date
//$upload->dateFormat 子目錄方式date的指定日期格式
//$upload->hashLevle

//upload() 如果上傳成功返回true,失敗返回false

if ($upload->upload()) {
$info = $upload->getUploadFileInfo();
return $info;
}else {
//是專門來獲取上傳的錯誤信息的
$this->error($upload->getErrorMsg());
}
}

}
?>

3. 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,將新的文件路徑提交
更新。

以上就是兩種處理圖片重復的問題,希望能夠幫助到你。

4. 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;
}

5. thinkPHP3.2.3文件上傳類多張圖片上傳怎麼只有第一張圖片被上傳

可以遍歷傳過來的FILES數組,然後用循環調用UPLOAD類
public function upload(){
$upload = new \Think\Upload();// 實例化上傳類
$upload->maxSize = 2000000 ;// 設置附件上傳大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 設置附件上傳類
$upload->rootPath = ''./Uploads/';
$upload->savePath = date('Y').'/'.date('m').'/'.date('d').'/';
$upload->subName = array('date', 'H');
$upload->saveName = md5(uniqid());
$info = $upload->upload();
if(!$info) { // 上傳錯誤提示
$this->error($upload->getError());
}else{ // 上傳成功
return $info;
//$this->success('上傳成功!');
}

}
//調用
foreach($_FILES["banner_index"]["size"] as $key=>$val){
if($val>0){
$info=$this->upload(); //判斷上傳文件大小大於0,調用upload
foreach($info as $v){
echo $v["savepath"].$v["savename"]; }
}
}