图片,音频其实都是文件,只是格式不一样罢了。
格式不一样,程序能检测到的信息就不一样。 比如,图片能检测到宽高。音频则检测不到。上传它们的时候,根据不同点,进行微调就可以了。
上传录音文件查看录音 (未上传)
后台进行处理
大致处理过程如下:
1.上传至本地服务器 2.上传至云服务器(比如七牛) 3.删除本地服务器文件 4.保存七牛服务器的文件路径至数据库漏了一步,上传本地服务器之前,进行过滤处理,包括判断大小是否超出,判断类型是否符合等等。
上传到本地的时候,首先要确保文件夹存储,然后确认文件名称不能重复。通常都是使用日期加随机数来避免重复。
如果文件夹不存在,则创建文件夹,并赋予777权限。一切程序都是无敌的,可以调用系统底层的代码,可以创建文件夹和赋予权限。/** * @param $folders 文件夹名称 * @param string $name 文件名称 * @param float|int $max_size 最大文件大小 * @param array $allowExts 允许上传的类型 * @return mixed */public function upload_audio($folders, $name = 'file' ,$max_size = 1024000 * 50 ,$allowExts = ['mp3','wav']){ if($_FILES[$name]['size'] > $max_size){ $res['error'] = '音频大小不能超过50M!'; return $res; } import('ORG.Net.UploadFile'); $upload = new UploadFile(); // 实例化上传类 $upload->allowExts = $allowExts; // 允许上传的文件格式 $upload->maxSize = $max_size; // 设置附件上传大小 $upload->saveRule = time().'_'.mt_rand(); $date_folders = date('Ymd',time()); $upload->savePath = "site_upload/".$folders.'/'.$date_folders.'/';// 设置附件上传目录 if (!is_dir($upload->savePath)){ @mkdir('./'.$upload->savePath, 0777,true); } $upload->upload(); $info = $upload->getUploadFileInfo();//取得成功上传的文件信息 if($info){ vendor('Func.Func'); vendor('Qiniu.Qiniu'); $qiniu = new Qiniu(); $file = C('SF_HOST'). $upload->savePath . $info[0]['savename']; $ext = pathinfo($file, PATHINFO_EXTENSION); $name = time() . mt_rand() . '.' . $ext; $success = $qiniu->up($file, $name, C('QINIU.BUCKET')); if($success){ @unlink('./' .$info[0]['savepath'] . $info[0]['savename']); $res['msg']='ok'; $res['save_name'] = C('CDN.URI') . $name; }else{ @unlink('./' .$info[0]['savepath'] . $info[0]['savename']); $res['error'] = '上传失败!!'; } }else{ $res['error']='上传失败!!'; } return $res;}
下面是七牛的up方法,
uploadToken($bucketName); list($ret, $error) = $upManager->put($token, $name, file_get_contents($file)); if (!$error) { return $ret; } else { return false; } }}
经过这些折腾,音频上传成功了!
![422101-20180615144236043-2049891028.png](https://images2018.cnblogs.com/blog/422101/201806/422101-20180615144236043-2049891028.png)