关于音频文件的上传
图片,音频其实都是文件,只是格式不一样罢了。
格式不一样,程序能检测到的信息就不一样。
比如,图片能检测到宽高。音频则检测不到。
上传它们的时候,根据不同点,进行微调就可以了。
<div class="form-group col-lg-12">
<label class="control-label col-lg-3 text-right">录音:</label>
<span class="input-group file-caption-main col-lg-5" style="float: left;">
<div class="form-control file-caption kv-fileinput-caption" style="overflow: hidden;line-height: 23px;">
支持mp3格式,wav格式
</div>
<input style="display: none;" class="file-real" name="recording" type="file" multiple="" />
<div class="input-group-btn file-btn">
<div class="btn btn-primary btn-file">
<i class="glyphicon glyphicon-folder-open"></i>
<span class="hidden-xs">上传录音文件</span>
</div>
</div>
</span>
<span class="col-lg-4 text-left erbi-form-right">
<if condition="$result['recording']">
<a href="<?php echo $result['recording'];?>" target="_blank">查看录音</a>
<else/>
(未上传)
</if>
</span>
</div>
后台进行处理
大致处理过程如下:
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方法,
<?php
use Qiniu\Storage\UploadManager;
use Qiniu\Auth;
class Qiniu
{
public function up($file, $name, $bucketName = '51aitaoqi')
{
$accessKey = C('QINIU.ACCESS_KEY');
$secretKey = C('QINIU.SECRET_KEY');
$upManager = new UploadManager();
$auth = new Auth($accessKey, $secretKey);
$token = $auth->uploadToken($bucketName);
list($ret, $error) = $upManager->put($token, $name, file_get_contents($file));
if (!$error) {
return $ret;
} else {
return false;
}
}
}
经过这些折腾,音频上传成功了!