zoukankan      html  css  js  c++  java
  • 关于音频文件的上传

    图片,音频其实都是文件,只是格式不一样罢了。
    格式不一样,程序能检测到的信息就不一样。
    比如,图片能检测到宽高。音频则检测不到。

    上传它们的时候,根据不同点,进行微调就可以了。

    <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>&nbsp;
                    <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 QiniuStorageUploadManager;
    use QiniuAuth;
    
    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;
            }
        }
    }
    
    

    经过这些折腾,音频上传成功了!

  • 相关阅读:
    Delphi的类和对象(九)- 类运算符as、is
    delphi中as,is关键字是如何工作的?
    delphi 中 as 和 is 的使用
    甘超波:NLP发问技巧
    甘超波:NLP如何挖掘信念
    甘超波:NLP自我价值感
    甘超波:NLP次感元
    甘超波:NLP前提假设之每个人都有足够资源,能达成成功的资源
    甘超波:NLP十二条前提假设之重复旧的行为,只会得到旧的结果
    甘超波:NLP十二条前提假设之诺要求知、必须行动
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/9187225.html
Copyright © 2011-2022 走看看