我们都知道,在一般的小程序app里面,需要上传某些文件、照片以及视频等等。那么这些东西通过php是如何实现的呢?
今天我们就通过实例的方式来聊聊服务器端的实现过程。
首先,需要获取文件的扩展名,将文件扩展名统一转化为小写字符。具体代码如下:
publicfunctiongetFileExt(fileName){ext_names=explode(.,fileName);ext_name=strtolower(ext_names[count(ext_names)-1]);returnext_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(_FILESasfile){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);}}