我们都知道,在一般的小程序app里面,需要上传某些文件、照片以及视频等等。那么这些东西通过php是如何实现的呢?
今天我们就通过实例的方式来聊聊服务器端的实现过程。
首先,需要获取文件的扩展名,将文件扩展名统一转化为小写字符。具体代码如下:
publicfunctiongetFileExt($fileName){$ext_names=explode(.,$fileName);$ext_name=strtolower($ext_names[count($ext_names)-1]);return$ext_name;}
其次,根据扩展名获取文件类型,比如如果后缀民为jpg、jpeg、png等后缀,则为图片,如果后缀为为mp4、avi、mov等,则表示为视频;如果后缀为txt、doc、docx、xls等,则表示为文件格式。
publicfunctiongetFileType($ext_name){if(in_array($ext_name,[jpg,jpeg,png,tif,gif,bmp])){returnimage;}elseif(in_array($ext_name,[mp4,avi,mov,wmv,rm,rmvb])){returnvideo;}elseif(in_array($ext_name,[mp3,amr,aac,m4a])){returnaudio;}elseif(in_array($ext_name,[pdf,doc,docx,xls,xlsx,ppt,pptx,txt])){returndocument;}}
对于格内文件的上传,这里有大小限制,上传的文件不能为空,最大不能超过M,对于那些不再文件内省范围内的文件,则直接抛出提示——未知的文件。具体的代码实现如下:
publicfunctionactionUpload(){if(empty($_FILES)){thrownew\yii\web\HttpException(,请上传附件);}$urls=[];foreach($_FILESas$file){if(empty($file[name])){thrownew\yii\web\HttpException(,文件名不能为空);}if($file[size]**){thrownew\yii\web\HttpException(,文件大小不能大于MB);}$fileName=$file[name];$fileExt=$this-getFileExt($fileName);$fileType=$this-getFileType($fileExt);if(!$fileType){thrownew\yii\web\HttpException(,不支持的文件类型);}$sha1=
sha1_file($file[tmp_name]);$saveName=$sha1...$fileExt;$dbFile=Attachment::find()-where([sha1=$sha1])-one();if(empty($dbFile)!is_file($this-path.$saveName)){if(!move_uploaded_file($file[tmp_name],$this-path.$saveName)){thrownew\yii\web\HttpException(,文件上传失败);}}$filesize=
filesize($this-path.$saveName);$data=[uploader=\Yii::$app-user-identity-id,sha1=$sha1,origin_name=$fileName,filesize=$filesize?$filesize:0,save_name=$saveName,url=$this-cdn.$saveName];if(empty($dbFile)){$dbFile=newAttachment();if($fileType==image){//image_png_size_add($this-path.$saveName,,null,false);}elseif($fileType==video){$videoResult=(newQCloud())-uploadVideo($this-path.$saveName);$data[url]=$videoResult-MediaUrl;$data[ext_id]=$videoResult-FileId;$data[cover_url]=$this-captureCoverUrl($this-path,$saveName);}}