当前位置: 首页 > news >正文

关于音频文件的上传

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

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

<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 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;
        }
    }
}

经过这些折腾,音频上传成功了!
422101-20180615144236043-2049891028.png

相关文章:

  • 技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...
  • bzoj 3670 [Noi2014]动物园
  • 开源PaaS Rainbond v3.6.0正式发布,Service Mesh开箱即用
  • caffe源码学习
  • 切图常用的布局和效果
  • signalr使用websocket报500错误
  • 获取免费代理推荐
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • inno安装
  • Vue命令行工具vue-cli
  • A-Treepath//dfs
  • OO第四次博客
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • Spring Boot模板引擎 (三)
  • js上传
  • Apache Spark Streaming 使用实例
  • FastReport在线报表设计器工作原理
  • git 常用命令
  • JAVA多线程机制解析-volatilesynchronized
  • Java-详解HashMap
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • QQ浏览器x5内核的兼容性问题
  • SpringCloud集成分布式事务LCN (一)
  • vue-router的history模式发布配置
  • WePY 在小程序性能调优上做出的探究
  • 浮现式设计
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 技术发展面试
  • 京东美团研发面经
  • 蓝海存储开关机注意事项总结
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 盘点那些不知名却常用的 Git 操作
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 线上 python http server profile 实践
  • 小李飞刀:SQL题目刷起来!
  • 自动记录MySQL慢查询快照脚本
  • ​configparser --- 配置文件解析器​
  • ​VRRP 虚拟路由冗余协议(华为)
  • "无招胜有招"nbsp;史上最全的互…
  • # 透过事物看本质的能力怎么培养?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $.ajax()方法详解
  • (3)llvm ir转换过程
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .equals()到底是什么意思?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET中两种OCR方式对比
  • @JoinTable会自动删除关联表的数据
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试