我用的是easyUpload插件,前端根聽說明寫好以後後端寫一個接收接口。php
我用的是thinkphp5前端
public function upload(){ $file = Request::instance()->file('file'); //給定目錄 // var_dump($file);die; $info = $file->move('upload'); var_dump($info);die; if($info && $info->getPathname()){ // echo $info->getPathname();die; return show(200,'success','/'.$info->getPathname()); } return show(0,'upload error'); } function show($status, $message,$data=[]){ return [ 'code'=> intval($status), 'message'=>$message, 'data'=>$data, ]; }
上面是後端程序config裏面設置默認json格式輸出。thinkphp
拓展下能夠在$info裏面獲取文件大小等信息。apache
上述內容正常接收圖片啥的都沒問題,可是一旦遇到大文件會失敗的。json
由於php默認是對於每一個頁面的內存,時間,上傳文件等有限制的。須要修改php.ini文件已確保大文件上傳。後端
upload_max_filesize = 8m ;容許上傳文件大小的最大值。默認爲2M
post_max_size = 8m ;表單POST給PHP能接收的最大值。默認爲8M安全
max_execution_time = 30 ;每一個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 60 ;每一個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 8m ;每一個PHP頁面所吃掉的最大內存,默認8Msession
將上述內容改成實際項目須要數量,重啓apache便可。app
--------------------------下載-------------------------thinkphp5
下載其實比較簡單,直接在<a href="連接地址">下載<a>便可,但這樣不太安全,過於暴露。
將全部的下載轉至統一頁面進行安全驗證後釋放會比較好。
id是該文件的惟一標識,token算是保護措施,驗證經過則提供下載。方法寫的比較隨意能夠多多拓展,能夠驗證登陸,ip,session啥的驗證。
public function download($id,$token){ if(!is_numeric($id) && $token != $this->token){ die('error009'); } $file_info = model('GameVersion')->getOneData('id = '.$id);//獲取文件信息 $file_url = '.'.$file_info['down_link']; $new_name = $file_info['resource_name']; if(!isset($file_url)||trim($file_url)==''){ echo '500'; die('error011'); } if(!file_exists($file_url)){ //檢查文件是否存在 echo '404'; die('error010'); } $file_name=basename($file_url);//獲取文件名 $file_type=explode('.',$file_url); $file_type=$file_type[count($file_type)-1];//獲取類型 $file_name = $new_name.'.'.$file_type;//設置名稱類型 $file=fopen($file_url,'r'); //打開文件 //輸入文件標籤 header("Content-type: application/octet-stream"); header("Accept-Ranges: bytes"); header("Accept-Length: ".$file_info['file_size']); header("Content-Disposition: attachment; filename=".$file_name); //輸出文件內容 echo fread($file,filesize($file_url)); fclose($file); }
另外這裏可能還會用到字節轉kb或mb之類的需求,一併寫在這裏。
function kb($filesize){ if ($filesize >= 1073741824) { $filesize = round($filesize / 1073741824 * 100) / 100 .' GB'; } elseif ($filesize >= 1048576) { $filesize = round($filesize / 1048576 * 100) / 100 .' MB'; } elseif($filesize >= 1024) { $filesize = round($filesize / 1024 * 100) / 100 . ' KB'; } else { $filesize = $filesize.' Bytes'; } return $filesize; }